diff options
Diffstat (limited to 'drivers/usb/core/sysfs.c')
| -rw-r--r-- | drivers/usb/core/sysfs.c | 24 | 
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index 5e1f5d55bf0..f66fba11fbd 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c @@ -743,6 +743,29 @@ static ssize_t show_modalias(struct device *dev,  }  static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL); +static ssize_t show_supports_autosuspend(struct device *dev, +		struct device_attribute *attr, char *buf) +{ +	struct usb_interface *intf; +	struct usb_device *udev; +	int ret; + +	intf = to_usb_interface(dev); +	udev = interface_to_usbdev(intf); + +	usb_lock_device(udev); +	/* Devices will be autosuspended even when an interface isn't claimed */ +	if (!intf->dev.driver || +			to_usb_driver(intf->dev.driver)->supports_autosuspend) +		ret = sprintf(buf, "%u\n", 1); +	else +		ret = sprintf(buf, "%u\n", 0); +	usb_unlock_device(udev); + +	return ret; +} +static DEVICE_ATTR(supports_autosuspend, S_IRUGO, show_supports_autosuspend, NULL); +  static struct attribute *intf_attrs[] = {  	&dev_attr_bInterfaceNumber.attr,  	&dev_attr_bAlternateSetting.attr, @@ -751,6 +774,7 @@ static struct attribute *intf_attrs[] = {  	&dev_attr_bInterfaceSubClass.attr,  	&dev_attr_bInterfaceProtocol.attr,  	&dev_attr_modalias.attr, +	&dev_attr_supports_autosuspend.attr,  	NULL,  };  static struct attribute_group intf_attr_grp = {  | 
