Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9df89d85 authored by Xenia Ragiadakou's avatar Xenia Ragiadakou Committed by Greg Kroah-Hartman
Browse files

usbcore: set lpm_capable field for LPM capable root hubs



This patch sets the lpm_capable field for root hubs with LPM capabilities.

Signed-off-by: default avatarXenia Ragiadakou <burzalodowa@gmail.com>
Reported-by: default avatarMartin MOKREJS <mmokrejs@gmail.com>
Suggested-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6c74dada
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1033,6 +1033,7 @@ static int register_root_hub(struct usb_hcd *hcd)
					dev_name(&usb_dev->dev), retval);
			return retval;
		}
		usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
	}

	retval = usb_new_device (usb_dev);
+6 −1
Original line number Diff line number Diff line
@@ -135,7 +135,7 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
	return usb_get_intfdata(hdev->actconfig->interface[0]);
}

static int usb_device_supports_lpm(struct usb_device *udev)
int usb_device_supports_lpm(struct usb_device *udev)
{
	/* USB 2.1 (and greater) devices indicate LPM support through
	 * their USB 2.0 Extended Capabilities BOS descriptor.
@@ -156,6 +156,11 @@ static int usb_device_supports_lpm(struct usb_device *udev)
				"Power management will be impacted.\n");
		return 0;
	}

	/* udev is root hub */
	if (!udev->parent)
		return 1;

	if (udev->parent->lpm_capable)
		return 1;

+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ extern int usb_get_device_descriptor(struct usb_device *dev,
		unsigned int size);
extern int usb_get_bos_descriptor(struct usb_device *dev);
extern void usb_release_bos_descriptor(struct usb_device *dev);
extern int usb_device_supports_lpm(struct usb_device *udev);
extern char *usb_cache_string(struct usb_device *udev, int index);
extern int usb_set_configuration(struct usb_device *dev, int configuration);
extern int usb_choose_configuration(struct usb_device *udev);