Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a137fb2 authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman
Browse files

greybus: interface: separate initialisation and registration



Separate interface initialisation from registration of the interface and
its bundles.

This is a step towards registering also interfaces that failed to
initialise (e.g. a dummy interface).

Signed-off-by: default avatarJohan Hovold <johan@hovoldconsulting.com>
Reviewed-by: default avatarJeffrey Carlyle <jcarlyle@google.com>
Reviewed-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 39495a2b
Loading
Loading
Loading
Loading
+17 −14
Original line number Diff line number Diff line
@@ -179,16 +179,12 @@ void gb_interfaces_remove(struct gb_host_device *hd)
		gb_interface_remove(intf);
}

/**
 * gb_interface_init
 *
 * Create connection for control CPort and then request/parse manifest.
 * Finally initialize all the bundles to set routes via SVC and initialize all
 * connections.
/*
 * Intialise an interface by enabling the control connection and fetching the
 * manifest and other information over it.
 */
int gb_interface_init(struct gb_interface *intf)
{
	struct gb_bundle *bundle, *tmp;
	int ret, size;
	void *manifest;

@@ -236,11 +232,22 @@ int gb_interface_init(struct gb_interface *intf)
	if (ret)
		goto free_manifest;

	/* Register the interface and its bundles. */
free_manifest:
	kfree(manifest);

	return ret;
}

/* Register an interface and its bundles. */
int gb_interface_add(struct gb_interface *intf)
{
	struct gb_bundle *bundle, *tmp;
	int ret;

	ret = device_add(&intf->dev);
	if (ret) {
		dev_err(&intf->dev, "failed to register interface: %d\n", ret);
		goto free_manifest;
		return ret;
	}

	dev_info(&intf->dev, "Interface added: VID=0x%08x, PID=0x%08x\n",
@@ -256,9 +263,5 @@ int gb_interface_init(struct gb_interface *intf)
		}
	}

	ret = 0;

free_manifest:
	kfree(manifest);
	return ret;
	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ struct gb_interface *gb_interface_find(struct gb_host_device *hd,
struct gb_interface *gb_interface_create(struct gb_host_device *hd,
					 u8 interface_id);
int gb_interface_init(struct gb_interface *intf);
int gb_interface_add(struct gb_interface *intf);
void gb_interface_remove(struct gb_interface *intf);
void gb_interfaces_remove(struct gb_host_device *hd);

+4 −0
Original line number Diff line number Diff line
@@ -629,6 +629,10 @@ static void gb_svc_process_intf_hotplug(struct gb_operation *operation)
		goto destroy_route;
	}

	ret = gb_interface_add(intf);
	if (ret)
		goto destroy_route;

	return;

destroy_route: