diff options
author | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2012-07-05 20:17:24 -0400 |
---|---|---|
committer | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2012-07-11 07:06:48 -0400 |
commit | 024f117c2f3c4bb5df6e6696b709e0f3ed7e5dbb (patch) | |
tree | 3ad556877608c58bd7844f82810dfc0d471d4f63 /drivers/usb | |
parent | f74631e3426474183389e55f703797bd965cd356 (diff) |
USB: Add a sysfs file to show LTM capabilities.
USB 3.0 devices can optionally support Latency Tolerance Messaging
(LTM). Add a new sysfs file in the device directory to show whether a
device is LTM capable. This file will be present for both USB 2.0 and
USB 3.0 devices.
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/hub.c | 7 | ||||
-rw-r--r-- | drivers/usb/core/sysfs.c | 10 |
2 files changed, 10 insertions, 7 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index b5bd6bd8fd12..d739f966b5a8 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -2610,13 +2610,6 @@ static int check_port_resume_type(struct usb_device *udev, | |||
2610 | return status; | 2610 | return status; |
2611 | } | 2611 | } |
2612 | 2612 | ||
2613 | static bool usb_device_supports_ltm(struct usb_device *udev) | ||
2614 | { | ||
2615 | if (udev->speed != USB_SPEED_SUPER || !udev->bos || !udev->bos->ss_cap) | ||
2616 | return false; | ||
2617 | return udev->bos->ss_cap->bmAttributes & USB_LTM_SUPPORT; | ||
2618 | } | ||
2619 | |||
2620 | int usb_disable_ltm(struct usb_device *udev) | 2613 | int usb_disable_ltm(struct usb_device *udev) |
2621 | { | 2614 | { |
2622 | struct usb_hcd *hcd = bus_to_hcd(udev->bus); | 2615 | struct usb_hcd *hcd = bus_to_hcd(udev->bus); |
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index 777f03c37725..682e8256b95d 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c | |||
@@ -253,6 +253,15 @@ show_removable(struct device *dev, struct device_attribute *attr, char *buf) | |||
253 | } | 253 | } |
254 | static DEVICE_ATTR(removable, S_IRUGO, show_removable, NULL); | 254 | static DEVICE_ATTR(removable, S_IRUGO, show_removable, NULL); |
255 | 255 | ||
256 | static ssize_t | ||
257 | show_ltm_capable(struct device *dev, struct device_attribute *attr, char *buf) | ||
258 | { | ||
259 | if (usb_device_supports_ltm(to_usb_device(dev))) | ||
260 | return sprintf(buf, "%s\n", "yes"); | ||
261 | return sprintf(buf, "%s\n", "no"); | ||
262 | } | ||
263 | static DEVICE_ATTR(ltm_capable, S_IRUGO, show_ltm_capable, NULL); | ||
264 | |||
256 | #ifdef CONFIG_PM | 265 | #ifdef CONFIG_PM |
257 | 266 | ||
258 | static ssize_t | 267 | static ssize_t |
@@ -649,6 +658,7 @@ static struct attribute *dev_attrs[] = { | |||
649 | &dev_attr_authorized.attr, | 658 | &dev_attr_authorized.attr, |
650 | &dev_attr_remove.attr, | 659 | &dev_attr_remove.attr, |
651 | &dev_attr_removable.attr, | 660 | &dev_attr_removable.attr, |
661 | &dev_attr_ltm_capable.attr, | ||
652 | NULL, | 662 | NULL, |
653 | }; | 663 | }; |
654 | static struct attribute_group dev_attr_grp = { | 664 | static struct attribute_group dev_attr_grp = { |