Commit 2e70c495 authored by Prashant Malani's avatar Prashant Malani Committed by Greg Kroah-Hartman
Browse files

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: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarPrashant Malani <pmalani@chromium.org>
Link: https://lore.kernel.org/r/20201125084911.1077462-2-pmalani@chromium.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent fd2c35b2
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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.

+33 −0
Original line number Diff line number Diff line
@@ -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");
}

/* ------------------------------------------------------------------------- */