Skip to content

Commit d9b2099

Browse files
author
Sarah Sharp
committed
USB: Refactor code to set LPM support flag.
Refactor the code that sets the usb_device flag to indicate the device support link power management (lpm_capable). The current code sets lpm_capable unconditionally if the USB devices have a USB 2.0 Extended Capabilities Descriptor. USB 3.0 devices can also have that descriptor, but the xHCI driver code that uses lpm_capable will not run the USB 2.0 LPM test for devices under the USB 3.0 roothub. Therefore, it's fine only set lpm_capable for high speed devices in this refactoring. Signed-off-by: Sarah Sharp <[email protected]>
1 parent 448b6eb commit d9b2099

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

drivers/usb/core/hub.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,21 @@ static struct usb_hub *hdev_to_hub(struct usb_device *hdev)
177177
return usb_get_intfdata(hdev->actconfig->interface[0]);
178178
}
179179

180+
static int usb_device_supports_lpm(struct usb_device *udev)
181+
{
182+
/* USB 2.1 (and greater) devices indicate LPM support through
183+
* their USB 2.0 Extended Capabilities BOS descriptor.
184+
*/
185+
if (udev->speed == USB_SPEED_HIGH) {
186+
if (udev->bos->ext_cap &&
187+
(USB_LPM_SUPPORT &
188+
le32_to_cpu(udev->bos->ext_cap->bmAttributes)))
189+
return 1;
190+
return 0;
191+
}
192+
return 0;
193+
}
194+
180195
/* USB 2.0 spec Section 11.24.4.5 */
181196
static int get_hub_descriptor(struct usb_device *hdev, void *data)
182197
{
@@ -3211,11 +3226,8 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
32113226

32123227
if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
32133228
retval = usb_get_bos_descriptor(udev);
3214-
if (!retval) {
3215-
if (udev->bos->ext_cap && (USB_LPM_SUPPORT &
3216-
le32_to_cpu(udev->bos->ext_cap->bmAttributes)))
3217-
udev->lpm_capable = 1;
3218-
}
3229+
if (!retval)
3230+
udev->lpm_capable = usb_device_supports_lpm(udev);
32193231
}
32203232

32213233
retval = 0;

0 commit comments

Comments
 (0)