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: Xenia Ragiadakou <burzalodowa@gmail.com> Reported-by: Martin MOKREJS <mmokrejs@gmail.com> Suggested-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6c74dada4f
commit
9df89d85b4
@ -1033,6 +1033,7 @@ static int register_root_hub(struct usb_hcd *hcd)
|
|||||||
dev_name(&usb_dev->dev), retval);
|
dev_name(&usb_dev->dev), retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = usb_new_device (usb_dev);
|
retval = usb_new_device (usb_dev);
|
||||||
|
@ -135,7 +135,7 @@ struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
|
|||||||
return usb_get_intfdata(hdev->actconfig->interface[0]);
|
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
|
/* USB 2.1 (and greater) devices indicate LPM support through
|
||||||
* their USB 2.0 Extended Capabilities BOS descriptor.
|
* 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");
|
"Power management will be impacted.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* udev is root hub */
|
||||||
|
if (!udev->parent)
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (udev->parent->lpm_capable)
|
if (udev->parent->lpm_capable)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ extern int usb_get_device_descriptor(struct usb_device *dev,
|
|||||||
unsigned int size);
|
unsigned int size);
|
||||||
extern int usb_get_bos_descriptor(struct usb_device *dev);
|
extern int usb_get_bos_descriptor(struct usb_device *dev);
|
||||||
extern void usb_release_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 char *usb_cache_string(struct usb_device *udev, int index);
|
||||||
extern int usb_set_configuration(struct usb_device *dev, int configuration);
|
extern int usb_set_configuration(struct usb_device *dev, int configuration);
|
||||||
extern int usb_choose_configuration(struct usb_device *udev);
|
extern int usb_choose_configuration(struct usb_device *udev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user