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
|
will show 0 until Discover Identity command result becomes
|
||||||
available. The value can be polled.
|
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.
|
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 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[] = {
|
static struct attribute *usb_pd_id_attrs[] = {
|
||||||
&dev_attr_id_header.attr,
|
&dev_attr_id_header.attr,
|
||||||
&dev_attr_cert_stat.attr,
|
&dev_attr_cert_stat.attr,
|
||||||
&dev_attr_product.attr,
|
&dev_attr_product.attr,
|
||||||
|
&dev_attr_product_type_vdo1.attr,
|
||||||
|
&dev_attr_product_type_vdo2.attr,
|
||||||
|
&dev_attr_product_type_vdo3.attr,
|
||||||
NULL
|
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", "id_header");
|
||||||
sysfs_notify(&dev->kobj, "identity", "cert_stat");
|
sysfs_notify(&dev->kobj, "identity", "cert_stat");
|
||||||
sysfs_notify(&dev->kobj, "identity", "product");
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче