aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/usb.h
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2010-01-08 12:57:28 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-02 17:54:12 -0500
commit9bbdf1e0afe771ca7650f9f476769310bee9d8f3 (patch)
tree22852edde0165523d37f045575512f5759040dba /drivers/usb/core/usb.h
parent0c590e2361511997430130e10e372217c1128da6 (diff)
USB: convert to the runtime PM framework
This patch (as1329) converts the USB stack over to the PM core's runtime PM framework. This involves numerous changes throughout usbcore, especially to hub.c and driver.c. Perhaps the most notable change is that CONFIG_USB_SUSPEND now depends on CONFIG_PM_RUNTIME instead of CONFIG_PM. Several fields in the usb_device and usb_interface structures are no longer needed. Some code which used to depend on CONFIG_USB_PM now depends on CONFIG_USB_SUSPEND (requiring some rearrangement of header files). The only visible change in behavior should be that following a system sleep (resume from RAM or resume from hibernation), autosuspended USB devices will be resumed just like everything else. They won't remain suspended. But if they aren't in use then they will naturally autosuspend again in a few seconds. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/usb.h')
-rw-r--r--drivers/usb/core/usb.h49
1 files changed, 6 insertions, 43 deletions
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
index 2b74a7f99c4..cd882203ad3 100644
--- a/drivers/usb/core/usb.h
+++ b/drivers/usb/core/usb.h
@@ -55,25 +55,8 @@ extern void usb_major_cleanup(void);
55extern int usb_suspend(struct device *dev, pm_message_t msg); 55extern int usb_suspend(struct device *dev, pm_message_t msg);
56extern int usb_resume(struct device *dev, pm_message_t msg); 56extern int usb_resume(struct device *dev, pm_message_t msg);
57 57
58extern void usb_autosuspend_work(struct work_struct *work);
59extern void usb_autoresume_work(struct work_struct *work);
60extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg); 58extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
61extern int usb_port_resume(struct usb_device *dev, pm_message_t msg); 59extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
62extern int usb_external_suspend_device(struct usb_device *udev,
63 pm_message_t msg);
64extern int usb_external_resume_device(struct usb_device *udev,
65 pm_message_t msg);
66extern int usb_remote_wakeup(struct usb_device *dev);
67
68static inline void usb_pm_lock(struct usb_device *udev)
69{
70 mutex_lock_nested(&udev->pm_mutex, udev->level);
71}
72
73static inline void usb_pm_unlock(struct usb_device *udev)
74{
75 mutex_unlock(&udev->pm_mutex);
76}
77 60
78#else 61#else
79 62
@@ -87,14 +70,6 @@ static inline int usb_port_resume(struct usb_device *udev, pm_message_t msg)
87 return 0; 70 return 0;
88} 71}
89 72
90static inline int usb_remote_wakeup(struct usb_device *udev)
91{
92 return 0;
93}
94
95static inline void usb_pm_lock(struct usb_device *udev) {}
96static inline void usb_pm_unlock(struct usb_device *udev) {}
97
98#endif 73#endif
99 74
100#ifdef CONFIG_USB_SUSPEND 75#ifdef CONFIG_USB_SUSPEND
@@ -102,6 +77,7 @@ static inline void usb_pm_unlock(struct usb_device *udev) {}
102extern void usb_autosuspend_device(struct usb_device *udev); 77extern void usb_autosuspend_device(struct usb_device *udev);
103extern void usb_try_autosuspend_device(struct usb_device *udev); 78extern void usb_try_autosuspend_device(struct usb_device *udev);
104extern int usb_autoresume_device(struct usb_device *udev); 79extern int usb_autoresume_device(struct usb_device *udev);
80extern int usb_remote_wakeup(struct usb_device *dev);
105 81
106#else 82#else
107 83
@@ -112,9 +88,13 @@ static inline int usb_autoresume_device(struct usb_device *udev)
112 return 0; 88 return 0;
113} 89}
114 90
91static inline int usb_remote_wakeup(struct usb_device *udev)
92{
93 return 0;
94}
95
115#endif 96#endif
116 97
117extern struct workqueue_struct *ksuspend_usb_wq;
118extern struct bus_type usb_bus_type; 98extern struct bus_type usb_bus_type;
119extern struct device_type usb_device_type; 99extern struct device_type usb_device_type;
120extern struct device_type usb_if_device_type; 100extern struct device_type usb_if_device_type;
@@ -144,23 +124,6 @@ static inline int is_usb_device_driver(struct device_driver *drv)
144 for_devices; 124 for_devices;
145} 125}
146 126
147/* Interfaces and their "power state" are owned by usbcore */
148
149static inline void mark_active(struct usb_interface *f)
150{
151 f->is_active = 1;
152}
153
154static inline void mark_quiesced(struct usb_interface *f)
155{
156 f->is_active = 0;
157}
158
159static inline int is_active(const struct usb_interface *f)
160{
161 return f->is_active;
162}
163
164 127
165/* for labeling diagnostics */ 128/* for labeling diagnostics */
166extern const char *usbcore_name; 129extern const char *usbcore_name;