OSDN Git Service

greybus: interface: device_id belongs to the interface
authorViresh Kumar <viresh.kumar@linaro.org>
Wed, 1 Jul 2015 06:43:58 +0000 (12:13 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 1 Jul 2015 23:38:42 +0000 (16:38 -0700)
While introducing bundles, the device_id also got moved to the bundle,
whereas it identifies an interface block to the AP.

Move it back to interface instead of bundle.

Calls to gb_bundle(s)_init() are dropped as connections will be
initialized while they are created now, as device_id will be valid.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/Documentation/sysfs-bus-greybus
drivers/staging/greybus/bundle.c
drivers/staging/greybus/bundle.h
drivers/staging/greybus/connection.c
drivers/staging/greybus/interface.c
drivers/staging/greybus/interface.h

index 0268dd2..808fde9 100644 (file)
@@ -105,6 +105,13 @@ Contact:   Greg Kroah-Hartman <greg@kroah.com>
 Description:
                Vendor ID string of a Greybus interface block.
 
+What:          /sys/bus/greybus/device/.../device_id
+Date:          October 2015
+KernelVersion: 4.XX
+Contact:       Greg Kroah-Hartman <greg@kroah.com>
+Description:
+               The device ID of a Greybus interface block.
+
 What:          /sys/bus/greybus/device/.../state
 Date:          October 2015
 KernelVersion: 4.XX
@@ -126,13 +133,6 @@ Contact:   Greg Kroah-Hartman <greg@kroah.com>
 Description:
                The protocol ID of a Greybus connection.
 
-What:          /sys/bus/greybus/device/.../device_id
-Date:          October 2015
-KernelVersion: 4.XX
-Contact:       Greg Kroah-Hartman <greg@kroah.com>
-Description:
-               The device ID of a Greybus bundle.
-
 What:          /sys/bus/greybus/device/.../state
 Date:          October 2015
 KernelVersion: 4.XX
index e636230..c6694ae 100644 (file)
@@ -13,15 +13,6 @@ static void gb_bundle_connections_exit(struct gb_bundle *bundle);
 static int gb_bundle_connections_init(struct gb_bundle *bundle);
 
 
-static ssize_t device_id_show(struct device *dev, struct device_attribute *attr,
-                             char *buf)
-{
-       struct gb_bundle *bundle = to_gb_bundle(dev);
-
-       return sprintf(buf, "%d\n", bundle->device_id);
-}
-static DEVICE_ATTR_RO(device_id);
-
 static ssize_t class_show(struct device *dev, struct device_attribute *attr,
                          char *buf)
 {
@@ -61,7 +52,6 @@ static DEVICE_ATTR_RW(state);
 
 
 static struct attribute *bundle_attrs[] = {
-       &dev_attr_device_id.attr,
        &dev_attr_class.attr,
        &dev_attr_state.attr,
        NULL,
@@ -184,9 +174,6 @@ struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id,
        bundle->class = class;
        INIT_LIST_HEAD(&bundle->connections);
 
-       /* Invalid device id to start with */
-       bundle->device_id = GB_DEVICE_ID_BAD;
-
        /* Build up the bundle device structures and register it with the
         * driver core */
        bundle->dev.parent = &intf->dev;
@@ -225,7 +212,7 @@ void gb_bundle_destroy(struct gb_bundle *bundle)
        device_unregister(&bundle->dev);
 }
 
-int gb_bundle_init(struct gb_bundle *bundle, u8 device_id)
+int gb_bundle_init(struct gb_bundle *bundle)
 {
        struct gb_interface *intf = bundle->intf;
        int ret;
@@ -234,8 +221,6 @@ int gb_bundle_init(struct gb_bundle *bundle, u8 device_id)
        if (intf->control && bundle->id == GB_CONTROL_BUNDLE_ID)
                return 0;
 
-       bundle->device_id = device_id;
-
        ret = gb_bundle_connections_init(bundle);
        if (ret) {
                dev_err(intf->hd->parent, "interface bundle init error %d\n",
@@ -247,13 +232,13 @@ int gb_bundle_init(struct gb_bundle *bundle, u8 device_id)
        return 0;
 }
 
-int gb_bundles_init(struct gb_interface *intf, u8 device_id)
+int gb_bundles_init(struct gb_interface *intf)
 {
        struct gb_bundle *bundle;
        int ret = 0;
 
        list_for_each_entry(bundle, &intf->bundles, links) {
-               ret = gb_bundle_init(bundle, device_id);
+               ret = gb_bundle_init(bundle);
                if (ret) {
                        dev_err(intf->hd->parent,
                                "Failed to initialize bundle %hhu\n",
index 887883d..60033b8 100644 (file)
@@ -18,7 +18,6 @@ struct gb_bundle {
        struct gb_interface     *intf;
        u8                      id;
        u8                      class;
-       u8                      device_id;
        struct list_head        connections;
        u8                      *state;
 
@@ -32,8 +31,8 @@ struct gb_bundle {
 struct gb_bundle *gb_bundle_create(struct gb_interface *intf, u8 bundle_id,
                                   u8 class);
 void gb_bundle_destroy(struct gb_bundle *bundle);
-int gb_bundle_init(struct gb_bundle *bundle, u8 device_id);
-int gb_bundles_init(struct gb_interface *intf, u8 device_id);
+int gb_bundle_init(struct gb_bundle *bundle);
+int gb_bundles_init(struct gb_interface *intf);
 
 struct gb_bundle *gb_bundle_find(struct gb_interface *intf, u8 bundle_id);
 void gb_bundle_bind_protocols(void);
index 85b2a33..2e306d1 100644 (file)
@@ -102,7 +102,7 @@ struct device_type greybus_connection_type = {
 
 void gb_connection_bind_protocol(struct gb_connection *connection)
 {
-       struct gb_bundle *bundle;
+       struct gb_interface *intf;
        struct gb_protocol *protocol;
 
        /* If we already have a protocol bound here, just return */
@@ -117,11 +117,11 @@ void gb_connection_bind_protocol(struct gb_connection *connection)
        connection->protocol = protocol;
 
        /*
-        * If we have a valid device_id for the bundle, then we have an active
-        * device, so bring up the connection at the same time.
+        * If we have a valid device_id for the interface block, then we have an
+        * active device, so bring up the connection at the same time.
         * */
-       bundle = connection->bundle;
-       if (bundle->device_id != GB_DEVICE_ID_BAD)
+       intf = connection->bundle->intf;
+       if (intf->device_id != GB_DEVICE_ID_BAD)
                gb_connection_init(connection);
 }
 
index 901c4ac..f9fd479 100644 (file)
@@ -20,6 +20,7 @@ static ssize_t field##_show(struct device *dev,                               \
 }                                                                      \
 static DEVICE_ATTR_RO(field)
 
+gb_interface_attr(device_id, d);
 gb_interface_attr(vendor, x);
 gb_interface_attr(product, x);
 gb_interface_attr(unique_id, llX);
@@ -27,6 +28,7 @@ gb_interface_attr(vendor_string, s);
 gb_interface_attr(product_string, s);
 
 static struct attribute *interface_attrs[] = {
+       &dev_attr_device_id.attr,
        &dev_attr_vendor.attr,
        &dev_attr_product.attr,
        &dev_attr_unique_id.attr,
@@ -71,10 +73,9 @@ struct device_type greybus_interface_type = {
  * managing control CPort. Also initialize the bundle, which will request SVC to
  * set route and will initialize the control protocol for this connection.
  */
-static int gb_create_control_connection(struct gb_interface *intf, u8 device_id)
+static int gb_create_control_connection(struct gb_interface *intf)
 {
        struct gb_bundle *bundle;
-       int ret;
 
        bundle = gb_bundle_create(intf, GB_CONTROL_BUNDLE_ID,
                                  GREYBUS_CLASS_CONTROL);
@@ -85,14 +86,6 @@ static int gb_create_control_connection(struct gb_interface *intf, u8 device_id)
                                  GREYBUS_PROTOCOL_CONTROL))
                return -EINVAL;
 
-       ret = gb_bundle_init(bundle, device_id);
-       if (ret) {
-               dev_err(&intf->dev,
-                       "error %d initializing bundles for interface %hu\n",
-                       ret, intf->interface_id);
-               return ret;
-       }
-
        return 0;
 }
 
@@ -136,6 +129,9 @@ struct gb_interface *gb_interface_create(struct greybus_host_device *hd,
        INIT_LIST_HEAD(&intf->bundles);
        INIT_LIST_HEAD(&intf->manifest_descs);
 
+       /* Invalid device id to start with */
+       intf->device_id = GB_DEVICE_ID_BAD;
+
        intf->dev.parent = &module->dev;
        intf->dev.bus = &greybus_bus_type;
        intf->dev.type = &greybus_interface_type;
@@ -204,8 +200,10 @@ int gb_interface_init(struct gb_interface *intf, u8 device_id)
        int ret, size;
        void *manifest;
 
+       intf->device_id = device_id;
+
        /* Establish control CPort connection */
-       ret = gb_create_control_connection(intf, device_id);
+       ret = gb_create_control_connection(intf);
        if (ret) {
                dev_err(&intf->dev, "Failed to create control CPort connection (%d)\n", ret);
                return ret;
@@ -243,12 +241,6 @@ int gb_interface_init(struct gb_interface *intf, u8 device_id)
                goto free_manifest;
        }
 
-       ret = gb_bundles_init(intf, device_id);
-       if (ret)
-               dev_err(&intf->dev,
-                       "Error %d initializing bundles for interface %hu\n",
-                       ret, intf->interface_id);
-
        /*
         * XXX
         * We've successfully parsed the manifest.  Now we need to
index 90dbff1..86eb894 100644 (file)
@@ -19,6 +19,7 @@ struct gb_interface {
        struct list_head links; /* greybus_host_device->interfaces */
        struct list_head manifest_descs;
        u8 interface_id;        /* Physical location within the Endo */
+       u8 device_id;           /* Device id allocated for the interface block by the SVC */
 
        /* Information taken from the manifest descriptor */
        u16 vendor;