summaryrefslogtreecommitdiff
path: root/drivers/staging/greybus/interface.c
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2016-07-19 15:24:46 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2016-07-19 19:03:32 -0700
commit1bb61840c4db64e27f0077dcfc5389e662022d40 (patch)
treee3aa4d1007bc2b19624d1ebb357a605ef5d04b12 /drivers/staging/greybus/interface.c
parentd29b67d44a7cf6d02e7319c0e5a4b729a0aa00e7 (diff)
greybus: interface: add interface-type attribute
Add an interface-type string attribute that represents the detected interface type as either "dummy", "unipro", "greybus", or "unknown". Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Reviewed-by: Sandeep Patil <sspatil@google.com> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/interface.c')
-rw-r--r--drivers/staging/greybus/interface.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c
index b3bd96e43128..1d50877bb212 100644
--- a/drivers/staging/greybus/interface.c
+++ b/drivers/staging/greybus/interface.c
@@ -491,6 +491,27 @@ static ssize_t power_now_show(struct device *dev,
}
static DEVICE_ATTR_RO(power_now);
+static const char *gb_interface_type_string(struct gb_interface *intf)
+{
+ static const char * const types[] = {
+ [GB_SVC_INTF_TYPE_UNKNOWN] = "unknown",
+ [GB_SVC_INTF_TYPE_DUMMY] = "dummy",
+ [GB_SVC_INTF_TYPE_UNIPRO] = "unipro",
+ [GB_SVC_INTF_TYPE_GREYBUS] = "greybus",
+ };
+
+ return types[intf->type];
+}
+
+static ssize_t interface_type_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct gb_interface *intf = to_gb_interface(dev);
+
+ return sprintf(buf, "%s\n", gb_interface_type_string(intf));
+}
+static DEVICE_ATTR_RO(interface_type);
+
static struct attribute *interface_attrs[] = {
&dev_attr_ddbl1_manufacturer_id.attr,
&dev_attr_ddbl1_product_id.attr,
@@ -501,6 +522,7 @@ static struct attribute *interface_attrs[] = {
&dev_attr_voltage_now.attr,
&dev_attr_current_now.attr,
&dev_attr_power_now.attr,
+ &dev_attr_interface_type.attr,
NULL,
};
ATTRIBUTE_GROUPS(interface);
@@ -721,6 +743,8 @@ static int gb_interface_activate_operation(struct gb_interface *intf)
return ret;
}
+ intf->type = type;
+
switch (type) {
case GB_SVC_INTF_TYPE_DUMMY:
dev_info(&intf->dev, "dummy interface detected\n");
@@ -734,6 +758,7 @@ static int gb_interface_activate_operation(struct gb_interface *intf)
break;
default:
dev_err(&intf->dev, "unknown interface type: %u\n", type);
+ intf->type = GB_SVC_INTF_TYPE_UNKNOWN;
return -ENODEV;
}