mirror of https://gitee.com/openkylin/linux.git
USB: set hub's default autosuspend delay as 0
This patch sets hub device's default autosuspend delay as 0 to speedup bus suspend, see comments in code for details. Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Ming Lei <ming.lei@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e6f30deafe
commit
596d789a21
|
@ -1614,6 +1614,41 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
desc = intf->cur_altsetting;
|
||||
hdev = interface_to_usbdev(intf);
|
||||
|
||||
/*
|
||||
* Set default autosuspend delay as 0 to speedup bus suspend,
|
||||
* based on the below considerations:
|
||||
*
|
||||
* - Unlike other drivers, the hub driver does not rely on the
|
||||
* autosuspend delay to provide enough time to handle a wakeup
|
||||
* event, and the submitted status URB is just to check future
|
||||
* change on hub downstream ports, so it is safe to do it.
|
||||
*
|
||||
* - The patch might cause one or more auto supend/resume for
|
||||
* below very rare devices when they are plugged into hub
|
||||
* first time:
|
||||
*
|
||||
* devices having trouble initializing, and disconnect
|
||||
* themselves from the bus and then reconnect a second
|
||||
* or so later
|
||||
*
|
||||
* devices just for downloading firmware, and disconnects
|
||||
* themselves after completing it
|
||||
*
|
||||
* For these quite rare devices, their drivers may change the
|
||||
* autosuspend delay of their parent hub in the probe() to one
|
||||
* appropriate value to avoid the subtle problem if someone
|
||||
* does care it.
|
||||
*
|
||||
* - The patch may cause one or more auto suspend/resume on
|
||||
* hub during running 'lsusb', but it is probably too
|
||||
* infrequent to worry about.
|
||||
*
|
||||
* - Change autosuspend delay of hub can avoid unnecessary auto
|
||||
* suspend timer for hub, also may decrease power consumption
|
||||
* of USB bus.
|
||||
*/
|
||||
pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
|
||||
|
||||
/* Hubs have proper suspend/resume support. */
|
||||
usb_enable_autosuspend(hdev);
|
||||
|
||||
|
|
Loading…
Reference in New Issue