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

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
......@@ -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;
}
......@@ -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);
......
......@@ -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:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment