diff options
Diffstat (limited to 'drivers/usb/core/sysfs.c')
| -rw-r--r-- | drivers/usb/core/sysfs.c | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index aa38db44818a..d9284b998bd7 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c @@ -497,8 +497,62 @@ set_usb2_hardware_lpm(struct device *dev, struct device_attribute *attr,  static DEVICE_ATTR(usb2_hardware_lpm, S_IRUGO | S_IWUSR, show_usb2_hardware_lpm,  			set_usb2_hardware_lpm); +static ssize_t +show_usb2_lpm_l1_timeout(struct device *dev, struct device_attribute *attr, +			 char *buf) +{ +	struct usb_device *udev = to_usb_device(dev); +	return sprintf(buf, "%d\n", udev->l1_params.timeout); +} + +static ssize_t +set_usb2_lpm_l1_timeout(struct device *dev, struct device_attribute *attr, +			const char *buf, size_t count) +{ +	struct usb_device *udev = to_usb_device(dev); +	u16 timeout; + +	if (kstrtou16(buf, 0, &timeout)) +		return -EINVAL; + +	udev->l1_params.timeout = timeout; + +	return count; +} + +static DEVICE_ATTR(usb2_lpm_l1_timeout, S_IRUGO | S_IWUSR, +		   show_usb2_lpm_l1_timeout, set_usb2_lpm_l1_timeout); + +static ssize_t +show_usb2_lpm_besl(struct device *dev, struct device_attribute *attr, +		   char *buf) +{ +	struct usb_device *udev = to_usb_device(dev); +	return sprintf(buf, "%d\n", udev->l1_params.besl); +} + +static ssize_t +set_usb2_lpm_besl(struct device *dev, struct device_attribute *attr, +		const char *buf, size_t count) +{ +	struct usb_device *udev = to_usb_device(dev); +	u8 besl; + +	if (kstrtou8(buf, 0, &besl) || besl > 15) +		return -EINVAL; + +	udev->l1_params.besl = besl; + +	return count; +} + +static DEVICE_ATTR(usb2_lpm_besl, S_IRUGO | S_IWUSR, +		   show_usb2_lpm_besl, set_usb2_lpm_besl); +  static struct attribute *usb2_hardware_lpm_attr[] = {  	&dev_attr_usb2_hardware_lpm.attr, +	&dev_attr_usb2_lpm_l1_timeout.attr, +	&dev_attr_usb2_lpm_besl.attr,  	NULL,  };  static struct attribute_group usb2_hardware_lpm_attr_group = { |