summaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/quirks.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2010-01-08 12:57:02 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 14:54:11 -0800
commit5899f1e020c8d53b2b6fbd6a6cf39c891ccdfade (patch)
treeacd9041996aa81db4bdc9a30fe1926e511d7eb77 /drivers/usb/core/quirks.c
parent088f7fec8a0e683db72fd8826c5d3ab914e197b1 (diff)
downloadtalos-op-linux-5899f1e020c8d53b2b6fbd6a6cf39c891ccdfade.tar.gz
talos-op-linux-5899f1e020c8d53b2b6fbd6a6cf39c891ccdfade.zip
USB: change handling of negative autosuspend delays
This patch (as1327) changes the way negative autosuspend delays prevent device from autosuspending. The current code checks for negative values explicitly in the autosuspend_check() routine. The updated code keeps things from getting that far by using usb_autoresume_device() to increment the usage counter when a negative delay is set, and by using usb_autosuspend_device() to decrement the usage counter when a non-negative delay is set. This complicates the set_autosuspend() attribute method code slightly, but it will reduce the overall power management overhead. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/quirks.c')
-rw-r--r--drivers/usb/core/quirks.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 4314f259524b..f073c5cb4e7b 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -103,11 +103,21 @@ void usb_detect_quirks(struct usb_device *udev)
dev_dbg(&udev->dev, "USB quirks for this device: %x\n",
udev->quirks);
+#ifdef CONFIG_USB_SUSPEND
+
/* By default, disable autosuspend for all devices. The hub driver
* will enable it for hubs.
*/
usb_disable_autosuspend(udev);
+ /* Autosuspend can also be disabled if the initial autosuspend_delay
+ * is negative.
+ */
+ if (udev->autosuspend_delay < 0)
+ usb_autoresume_device(udev);
+
+#endif
+
/* For the present, all devices default to USB-PERSIST enabled */
#if 0 /* was: #ifdef CONFIG_PM */
/* Hubs are automatically enabled for USB-PERSIST */
OpenPOWER on IntegriCloud