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:
Родитель
fd2c35b2f5
Коммит
2e70c495ca
|
@ -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");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
|
Загрузка…
Ссылка в новой задаче