usb: typec: Expose Product Type VDOs via sysfs

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>
This commit is contained in:
Prashant Malani 2020-11-25 00:49:11 -08:00 коммит произвёл Greg Kroah-Hartman
Родитель fd2c35b2f5
Коммит 2e70c495ca
2 изменённых файлов: 57 добавлений и 0 удалений

Просмотреть файл

@ -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.

Просмотреть файл

@ -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");
}
/* ------------------------------------------------------------------------- */