greybus: bundle: add bundle_id attribute

Add a bundle_id attribute for the interface-unique id of a bundle that
user space can use for matching.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
diff --git a/drivers/staging/greybus/Documentation/sysfs-bus-greybus b/drivers/staging/greybus/Documentation/sysfs-bus-greybus
index 88ed2d8..9329a31 100644
--- a/drivers/staging/greybus/Documentation/sysfs-bus-greybus
+++ b/drivers/staging/greybus/Documentation/sysfs-bus-greybus
@@ -104,6 +104,13 @@
 Description:
 		The greybus class of the bundle B.
 
+What:		/sys/bus/greybus/device/N-I.B/bundle_id
+Date:		October 2015
+KernelVersion:	4.XX
+Contact:	Greg Kroah-Hartman <greg@kroah.com>
+Description:
+		The interface-unique id of the bundle B.
+
 What:		/sys/bus/greybus/device/N-I.B/state
 Date:		October 2015
 KernelVersion:	4.XX
diff --git a/drivers/staging/greybus/bundle.c b/drivers/staging/greybus/bundle.c
index 61c9a6d..f746438 100644
--- a/drivers/staging/greybus/bundle.c
+++ b/drivers/staging/greybus/bundle.c
@@ -18,6 +18,15 @@
 }
 static DEVICE_ATTR_RO(bundle_class);
 
+static ssize_t bundle_id_show(struct device *dev,
+			      struct device_attribute *attr, char *buf)
+{
+	struct gb_bundle *bundle = to_gb_bundle(dev);
+
+	return sprintf(buf, "%u\n", bundle->id);
+}
+static DEVICE_ATTR_RO(bundle_id);
+
 static ssize_t state_show(struct device *dev, struct device_attribute *attr,
 			  char *buf)
 {
@@ -49,6 +58,7 @@
 
 static struct attribute *bundle_attrs[] = {
 	&dev_attr_bundle_class.attr,
+	&dev_attr_bundle_id.attr,
 	&dev_attr_state.attr,
 	NULL,
 };