aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2010-01-08 12:56:54 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 17:54:10 -0500
commit088f7fec8a0e683db72fd8826c5d3ab914e197b1 (patch)
tree971ef100d0db9727e4403865b67c72de62e8247a /include/linux
parent0c4db6df915bc470f0cd32fe48287fa6eb6adfb4 (diff)
USB: implement usb_enable_autosuspend
This patch (as1326) adds usb_enable_autosuspend() and usb_disable_autosuspend() routines for use by drivers. If a driver knows that its device can handle suspends and resumes correctly, it can enable autosuspend all by itself. This is equivalent to the user writing "auto" to the device's power/level attribute. The implementation differs slightly from what it used to be. Now autosuspend is disabled simply by doing usb_autoresume_device() (to increment the usage counter) and enabled by doing usb_autosuspend_device() (to decrement the usage counter). The set_level() attribute method is updated to use the new routines, and the USB Power-Management documentation is updated. The patch adds a usb_enable_autosuspend() call to the hub driver's probe routine, allowing the special-case code for hubs in quirks.c to be removed. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/usb.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 332eaea61021..e6419ac89ea2 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -542,6 +542,9 @@ extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id);
542 542
543/* USB autosuspend and autoresume */ 543/* USB autosuspend and autoresume */
544#ifdef CONFIG_USB_SUSPEND 544#ifdef CONFIG_USB_SUSPEND
545extern int usb_enable_autosuspend(struct usb_device *udev);
546extern int usb_disable_autosuspend(struct usb_device *udev);
547
545extern int usb_autopm_get_interface(struct usb_interface *intf); 548extern int usb_autopm_get_interface(struct usb_interface *intf);
546extern void usb_autopm_put_interface(struct usb_interface *intf); 549extern void usb_autopm_put_interface(struct usb_interface *intf);
547extern int usb_autopm_get_interface_async(struct usb_interface *intf); 550extern int usb_autopm_get_interface_async(struct usb_interface *intf);
@@ -565,6 +568,11 @@ static inline void usb_mark_last_busy(struct usb_device *udev)
565 568
566#else 569#else
567 570
571static inline int usb_enable_autosuspend(struct usb_device *udev)
572{ return 0; }
573static inline int usb_disable_autosuspend(struct usb_device *udev)
574{ return 0; }
575
568static inline int usb_autopm_get_interface(struct usb_interface *intf) 576static inline int usb_autopm_get_interface(struct usb_interface *intf)
569{ return 0; } 577{ return 0; }
570static inline int usb_autopm_get_interface_async(struct usb_interface *intf) 578static inline int usb_autopm_get_interface_async(struct usb_interface *intf)