Merge "usb: misc: lvstest: add entry to place port in compliance mode"
This commit is contained in:
commit
0052d71715
2 changed files with 54 additions and 0 deletions
|
@ -45,3 +45,16 @@ Contact: Pratyush Anand <pratyush.anand@gmail.com>
|
|||
Description:
|
||||
Write to this node to issue "U3 exit" for Link Layer
|
||||
Validation device. It is needed for TD.7.36.
|
||||
|
||||
What: /sys/bus/usb/devices/.../enable_compliance
|
||||
Date: July 2017
|
||||
Description:
|
||||
Write to this node to set the port to compliance mode to test
|
||||
with Link Layer Validation device. It is needed for TD.7.34.
|
||||
|
||||
What: /sys/bus/usb/devices/.../warm_reset
|
||||
Date: July 2017
|
||||
Description:
|
||||
Write to this node to issue "Warm Reset" for Link Layer Validation
|
||||
device. It may be needed to properly reset an xHCI 1.1 host port if
|
||||
compliance mode needed to be explicitly enabled.
|
||||
|
|
|
@ -180,6 +180,25 @@ static ssize_t hot_reset_store(struct device *dev,
|
|||
}
|
||||
static DEVICE_ATTR_WO(hot_reset);
|
||||
|
||||
static ssize_t warm_reset_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct usb_interface *intf = to_usb_interface(dev);
|
||||
struct usb_device *hdev = interface_to_usbdev(intf);
|
||||
struct lvs_rh *lvs = usb_get_intfdata(intf);
|
||||
int ret;
|
||||
|
||||
ret = lvs_rh_set_port_feature(hdev, lvs->portnum,
|
||||
USB_PORT_FEAT_BH_PORT_RESET);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "can't issue warm reset %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR_WO(warm_reset);
|
||||
|
||||
static ssize_t u2_timeout_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
|
@ -278,13 +297,35 @@ free_desc:
|
|||
}
|
||||
static DEVICE_ATTR_WO(get_dev_desc);
|
||||
|
||||
static ssize_t enable_compliance_store(struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct usb_interface *intf = to_usb_interface(dev);
|
||||
struct usb_device *hdev = interface_to_usbdev(intf);
|
||||
struct lvs_rh *lvs = usb_get_intfdata(intf);
|
||||
int ret;
|
||||
|
||||
ret = lvs_rh_set_port_feature(hdev,
|
||||
lvs->portnum | USB_SS_PORT_LS_COMP_MOD << 3,
|
||||
USB_PORT_FEAT_LINK_STATE);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "can't enable compliance mode %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR_WO(enable_compliance);
|
||||
|
||||
static struct attribute *lvs_attributes[] = {
|
||||
&dev_attr_get_dev_desc.attr,
|
||||
&dev_attr_u1_timeout.attr,
|
||||
&dev_attr_u2_timeout.attr,
|
||||
&dev_attr_hot_reset.attr,
|
||||
&dev_attr_warm_reset.attr,
|
||||
&dev_attr_u3_entry.attr,
|
||||
&dev_attr_u3_exit.attr,
|
||||
&dev_attr_enable_compliance.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue