diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2010-01-08 12:56:54 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-02 17:54:10 -0500 |
| commit | 088f7fec8a0e683db72fd8826c5d3ab914e197b1 (patch) | |
| tree | 971ef100d0db9727e4403865b67c72de62e8247a /include/linux | |
| parent | 0c4db6df915bc470f0cd32fe48287fa6eb6adfb4 (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.h | 8 |
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 |
| 545 | extern int usb_enable_autosuspend(struct usb_device *udev); | ||
| 546 | extern int usb_disable_autosuspend(struct usb_device *udev); | ||
| 547 | |||
| 545 | extern int usb_autopm_get_interface(struct usb_interface *intf); | 548 | extern int usb_autopm_get_interface(struct usb_interface *intf); |
| 546 | extern void usb_autopm_put_interface(struct usb_interface *intf); | 549 | extern void usb_autopm_put_interface(struct usb_interface *intf); |
| 547 | extern int usb_autopm_get_interface_async(struct usb_interface *intf); | 550 | extern 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 | ||
| 571 | static inline int usb_enable_autosuspend(struct usb_device *udev) | ||
| 572 | { return 0; } | ||
| 573 | static inline int usb_disable_autosuspend(struct usb_device *udev) | ||
| 574 | { return 0; } | ||
| 575 | |||
| 568 | static inline int usb_autopm_get_interface(struct usb_interface *intf) | 576 | static inline int usb_autopm_get_interface(struct usb_interface *intf) |
| 569 | { return 0; } | 577 | { return 0; } |
| 570 | static inline int usb_autopm_get_interface_async(struct usb_interface *intf) | 578 | static inline int usb_autopm_get_interface_async(struct usb_interface *intf) |
