Commit bb97ea81 authored by Viresh Kumar's avatar Viresh Kumar Committed by Greg Kroah-Hartman

greybus: bundle: Initialize all bundles on link-up

An interface can have 1 or more bundles. On link-up event, we must initialize
all the bundles associated with the interface.
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 7c183f70
...@@ -146,9 +146,7 @@ static void svc_management(struct svc_function_unipro_management *management, ...@@ -146,9 +146,7 @@ static void svc_management(struct svc_function_unipro_management *management,
management->link_up.interface_id); management->link_up.interface_id);
return; return;
} }
ret = gb_bundle_init(intf, ret = gb_bundles_init(intf, management->link_up.device_id);
management->link_up.interface_id,
management->link_up.device_id);
if (ret) { if (ret) {
dev_err(hd->parent, dev_err(hd->parent,
"error %d initializing bundles for interface %hhu\n", "error %d initializing bundles for interface %hhu\n",
......
...@@ -146,16 +146,11 @@ void gb_bundle_destroy(struct gb_interface *intf) ...@@ -146,16 +146,11 @@ void gb_bundle_destroy(struct gb_interface *intf)
} }
} }
int gb_bundle_init(struct gb_interface *intf, u8 bundle_id, u8 device_id) int gb_bundle_init(struct gb_bundle *bundle, u8 device_id)
{ {
struct gb_bundle *bundle; struct gb_interface *intf = bundle->intf;
int ret; int ret;
bundle = gb_bundle_find(intf, bundle_id);
if (!bundle) {
dev_err(intf->hd->parent, "bundle %hhu not found\n", bundle_id);
return -ENOENT;
}
bundle->device_id = device_id; bundle->device_id = device_id;
ret = svc_set_route_send(bundle, intf->hd); ret = svc_set_route_send(bundle, intf->hd);
...@@ -175,6 +170,24 @@ int gb_bundle_init(struct gb_interface *intf, u8 bundle_id, u8 device_id) ...@@ -175,6 +170,24 @@ int gb_bundle_init(struct gb_interface *intf, u8 bundle_id, u8 device_id)
return 0; return 0;
} }
int gb_bundles_init(struct gb_interface *intf, u8 device_id)
{
struct gb_bundle *bundle;
int ret = 0;
list_for_each_entry(bundle, &intf->bundles, links) {
ret = gb_bundle_init(bundle, device_id);
if (ret) {
dev_err(intf->hd->parent,
"Failed to initialize bundle %hhu\n",
bundle->id);
break;
}
}
return ret;
}
struct gb_bundle *gb_bundle_find(struct gb_interface *intf, u8 bundle_id) struct gb_bundle *gb_bundle_find(struct gb_interface *intf, u8 bundle_id)
{ {
struct gb_bundle *bundle; struct gb_bundle *bundle;
......
...@@ -31,7 +31,8 @@ struct gb_bundle { ...@@ -31,7 +31,8 @@ struct gb_bundle {
struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id, struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id,
u8 class_type); u8 class_type);
void gb_bundle_destroy(struct gb_interface *intf); void gb_bundle_destroy(struct gb_interface *intf);
int gb_bundle_init(struct gb_interface *intf, u8 module_id, u8 device_id); int gb_bundle_init(struct gb_bundle *bundle, u8 device_id);
int gb_bundles_init(struct gb_interface *intf, u8 device_id);
struct gb_bundle *gb_bundle_find(struct gb_interface *intf, u8 bundle_id); struct gb_bundle *gb_bundle_find(struct gb_interface *intf, u8 bundle_id);
void gb_bundle_bind_protocols(void); void gb_bundle_bind_protocols(void);
......
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