From f0960d05f5ece96a7b2539e0adb92bfbfc83bf3e Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Thu, 3 Dec 2015 19:18:02 +0100 Subject: [PATCH] greybus: core: add bus id to uevents Add the bus id to all greybus uevents. This is needed to identify devices that are being removed (e.g. at hot-unplug). Signed-off-by: Johan Hovold Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/core.c | 12 +++++++----- drivers/staging/greybus/svc.c | 1 + drivers/staging/greybus/svc.h | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/staging/greybus/core.c b/drivers/staging/greybus/core.c index 9dcb1bf311c0..3d8b7ef589bb 100644 --- a/drivers/staging/greybus/core.c +++ b/drivers/staging/greybus/core.c @@ -77,7 +77,7 @@ static int greybus_module_match(struct device *dev, struct device_driver *drv) static int greybus_uevent(struct device *dev, struct kobj_uevent_env *env) { - struct gb_host_device *hd = NULL; + struct gb_host_device *hd; struct gb_interface *intf = NULL; struct gb_bundle *bundle = NULL; struct gb_svc *svc = NULL; @@ -86,16 +86,22 @@ static int greybus_uevent(struct device *dev, struct kobj_uevent_env *env) hd = to_gb_host_device(dev); } else if (is_gb_interface(dev)) { intf = to_gb_interface(dev); + hd = intf->hd; } else if (is_gb_bundle(dev)) { bundle = to_gb_bundle(dev); intf = bundle->intf; + hd = intf->hd; } else if (is_gb_svc(dev)) { svc = to_gb_svc(dev); + hd = svc->hd; } else { dev_WARN(dev, "uevent for unknown greybus device \"type\"!\n"); return -EINVAL; } + if (add_uevent_var(env, "BUS=%u", hd->bus_id)) + return -ENOMEM; + if (bundle) { // FIXME // add a uevent that can "load" a bundle type @@ -104,10 +110,6 @@ static int greybus_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } - // FIXME - // "just" a module, be vague here, nothing binds to a module except - // the greybus core, so there's not much, if anything, we need to - // advertise. return 0; } diff --git a/drivers/staging/greybus/svc.c b/drivers/staging/greybus/svc.c index f65aba6446e2..7037125e5cb7 100644 --- a/drivers/staging/greybus/svc.c +++ b/drivers/staging/greybus/svc.c @@ -695,6 +695,7 @@ static int gb_svc_connection_init(struct gb_connection *connection) ida_init(&svc->device_id_map); svc->state = GB_SVC_STATE_RESET; svc->connection = connection; + svc->hd = hd; connection->private = svc; hd->svc = svc; diff --git a/drivers/staging/greybus/svc.h b/drivers/staging/greybus/svc.h index 3acfa07cc73b..ca0f71d059b1 100644 --- a/drivers/staging/greybus/svc.h +++ b/drivers/staging/greybus/svc.h @@ -19,6 +19,7 @@ enum gb_svc_state { struct gb_svc { struct device dev; + struct gb_host_device *hd; struct gb_connection *connection; enum gb_svc_state state; struct ida device_id_map;