usbcore: add autosuspend/autoresume infrastructure
This patch (as739) adds the basic infrastructure for USB autosuspend and autoresume. The main features are: PM usage counters added to struct usb_device and struct usb_interface, indicating whether it's okay to autosuspend them or they are currently in use. Flag added to usb_device indicating whether the current suspend/resume operation originated from outside or as an autosuspend/autoresume. Flag added to usb_driver indicating whether the driver supports autosuspend. If not, no device bound to the driver will be autosuspended. Mutex added to usb_device for protecting PM operations. Unlike the device semaphore, the locking rule for the pm_mutex is that you must acquire the locks going _up_ the device tree. New routines handling autosuspend/autoresume requests for interfaces and devices. Suspend and resume requests are propagated up the device tree (but not outside the USB subsystem). work_struct added to usb_device, for carrying out delayed autosuspend requests. Autoresume added (and autosuspend prevented) during probe and disconnect. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b6956ffa59
commit
645daaab0b
@ -49,6 +49,20 @@ static inline int usb_resume_both(struct usb_device *udev)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_SUSPEND
|
||||
|
||||
#define USB_AUTOSUSPEND_DELAY (HZ*2)
|
||||
|
||||
extern void usb_autosuspend_device(struct usb_device *udev, int dec_busy_cnt);
|
||||
extern int usb_autoresume_device(struct usb_device *udev, int inc_busy_cnt);
|
||||
|
||||
#else
|
||||
|
||||
#define usb_autosuspend_device(udev, dec_busy_cnt) do {} while (0)
|
||||
#define usb_autoresume_device(udev, inc_busy_cnt) 0
|
||||
|
||||
#endif
|
||||
|
||||
extern struct bus_type usb_bus_type;
|
||||
extern struct usb_device_driver usb_generic_driver;
|
||||
|
||||
|
Reference in New Issue
Block a user