usb: typec: Expose Product Type VDOs via sysfs
authorPrashant Malani <pmalani@chromium.org>
Wed, 25 Nov 2020 08:49:11 +0000 (00:49 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Nov 2020 08:21:13 +0000 (09:21 +0100)
A PD-capable device can return up to 3 Product Type VDOs as part of its
DiscoverIdentity Response (USB PD Spec, Rev 3.0, Version 2.0, Section
6.4.4.3.1). Add sysfs attributes to expose these to userspace.

Cc: Benson Leung <bleung@chromium.org>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Prashant Malani <pmalani@chromium.org>
Link: https://lore.kernel.org/r/20201125084911.1077462-2-pmalani@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/ABI/testing/sysfs-class-typec
drivers/usb/typec/class.c

index 88ffc14..619c4c6 100644 (file)
@@ -228,6 +228,30 @@ Description:
                will show 0 until Discover Identity command result becomes
                available. The value can be polled.
 
+What:          /sys/class/typec/<port>-{partner|cable}/identity/product_type_vdo1
+Date:          October 2020
+Contact:       Prashant Malani <pmalani@chromium.org>
+Description:
+               1st Product Type VDO of Discover Identity command result.
+               The value will show 0 until Discover Identity command result becomes
+               available and a valid Product Type VDO is returned.
+
+What:          /sys/class/typec/<port>-{partner|cable}/identity/product_type_vdo2
+Date:          October 2020
+Contact:       Prashant Malani <pmalani@chromium.org>
+Description:
+               2nd Product Type VDO of Discover Identity command result.
+               The value will show 0 until Discover Identity command result becomes
+               available and a valid Product Type VDO is returned.
+
+What:          /sys/class/typec/<port>-{partner|cable}/identity/product_type_vdo3
+Date:          October 2020
+Contact:       Prashant Malani <pmalani@chromium.org>
+Description:
+               3rd Product Type VDO of Discover Identity command result.
+               The value will show 0 until Discover Identity command result becomes
+               available and a valid Product Type VDO is returned.
+
 
 USB Type-C port alternate mode devices.
 
index cb13621..df4478b 100644 (file)
@@ -124,10 +124,40 @@ static ssize_t product_show(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RO(product);
 
+static ssize_t product_type_vdo1_show(struct device *dev, struct device_attribute *attr,
+                                     char *buf)
+{
+       struct usb_pd_identity *id = get_pd_identity(dev);
+
+       return sysfs_emit(buf, "0x%08x\n", id->vdo[0]);
+}
+static DEVICE_ATTR_RO(product_type_vdo1);
+
+static ssize_t product_type_vdo2_show(struct device *dev, struct device_attribute *attr,
+                                     char *buf)
+{
+       struct usb_pd_identity *id = get_pd_identity(dev);
+
+       return sysfs_emit(buf, "0x%08x\n", id->vdo[1]);
+}
+static DEVICE_ATTR_RO(product_type_vdo2);
+
+static ssize_t product_type_vdo3_show(struct device *dev, struct device_attribute *attr,
+                                     char *buf)
+{
+       struct usb_pd_identity *id = get_pd_identity(dev);
+
+       return sysfs_emit(buf, "0x%08x\n", id->vdo[2]);
+}
+static DEVICE_ATTR_RO(product_type_vdo3);
+
 static struct attribute *usb_pd_id_attrs[] = {
        &dev_attr_id_header.attr,
        &dev_attr_cert_stat.attr,
        &dev_attr_product.attr,
+       &dev_attr_product_type_vdo1.attr,
+       &dev_attr_product_type_vdo2.attr,
+       &dev_attr_product_type_vdo3.attr,
        NULL
 };
 
@@ -146,6 +176,9 @@ static void typec_report_identity(struct device *dev)
        sysfs_notify(&dev->kobj, "identity", "id_header");
        sysfs_notify(&dev->kobj, "identity", "cert_stat");
        sysfs_notify(&dev->kobj, "identity", "product");
+       sysfs_notify(&dev->kobj, "identity", "product_type_vdo1");
+       sysfs_notify(&dev->kobj, "identity", "product_type_vdo2");
+       sysfs_notify(&dev->kobj, "identity", "product_type_vdo3");
 }
 
 /* ------------------------------------------------------------------------- */