summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/interface.c
diff options
context:
space:
mode:
authorMichael Scott <michael.scott@linaro.org>2016-02-08 17:08:46 -0800
committerGreg Kroah-Hartman <gregkh@google.com>2016-02-10 11:28:13 -0800
commitd5a265648aa830383bc2c3e750ffe1bea0cd4309 (patch)
tree3b7ddee517120de5c94aea1969812342b6d03e27 /drivers/staging/greybus/interface.c
parentf6d6f5bd29f76721d7ac5c64426a1f45203c622a (diff)
downloadop-kernel-dev-d5a265648aa830383bc2c3e750ffe1bea0cd4309.zip
op-kernel-dev-d5a265648aa830383bc2c3e750ffe1bea0cd4309.tar.gz
greybus: interface: clear upper 16-bits of version_id and product_id
Current userspace looks through the sysfs interface entries for matching vendor_id and product_id any time an interface is opened by module developers. The upper 16-bits of ES3 vendor_id and product_id contain a reverse mask of the lower 16-bits. This additional information is never used and should be removed so that every consumer of these sysfs entries doesn't have to perform the same bit clearing logic. Signed-off-by: Michael Scott <michael.scott@linaro.org> Reviewed-by: Alex Elder <elder@linaro.org> Reviewed-by: Viresh Kumar <viresh.kumar@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, 23 insertions, 2 deletions
diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c
index 9c05d81..6c815db 100644
--- a/drivers/staging/greybus/interface.c
+++ b/drivers/staging/greybus/interface.c
@@ -23,12 +23,33 @@ static DEVICE_ATTR_RO(field)
gb_interface_attr(ddbl1_manufacturer_id, "0x%08x");
gb_interface_attr(ddbl1_product_id, "0x%08x");
gb_interface_attr(interface_id, "%u");
-gb_interface_attr(vendor_id, "0x%08x");
-gb_interface_attr(product_id, "0x%08x");
gb_interface_attr(vendor_string, "%s");
gb_interface_attr(product_string, "%s");
gb_interface_attr(serial_number, "0x%016llx");
+static ssize_t vendor_id_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct gb_interface *intf = to_gb_interface(dev);
+
+ /* clear the upper 16-bits to keep userspace "simple" */
+ return scnprintf(buf, PAGE_SIZE, "0x%04x\n",
+ (0x0000FFFF & intf->vendor_id));
+}
+static DEVICE_ATTR_RO(vendor_id);
+
+static ssize_t product_id_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct gb_interface *intf = to_gb_interface(dev);
+
+ /* clear the upper 16-bits to keep userspace "simple" */
+ return scnprintf(buf, PAGE_SIZE, "0x%04x\n",
+ (0x0000FFFF & intf->product_id));
+}
+static DEVICE_ATTR_RO(product_id);
+
static ssize_t version_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
OpenPOWER on IntegriCloud