diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/driver.c | 21 | ||||
-rw-r--r-- | drivers/usb/core/usb.c | 21 | ||||
-rw-r--r-- | drivers/usb/core/usb.h | 8 |
3 files changed, 20 insertions, 30 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index e6dd2b9210f6..8c0a7de61228 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
@@ -1033,7 +1033,7 @@ static int autosuspend_check(struct usb_device *udev) | |||
1033 | * | 1033 | * |
1034 | * This routine can run only in process context. | 1034 | * This routine can run only in process context. |
1035 | */ | 1035 | */ |
1036 | int usb_suspend_both(struct usb_device *udev, pm_message_t msg) | 1036 | static int usb_suspend_both(struct usb_device *udev, pm_message_t msg) |
1037 | { | 1037 | { |
1038 | int status = 0; | 1038 | int status = 0; |
1039 | int i = 0; | 1039 | int i = 0; |
@@ -1109,7 +1109,7 @@ int usb_suspend_both(struct usb_device *udev, pm_message_t msg) | |||
1109 | * | 1109 | * |
1110 | * This routine can run only in process context. | 1110 | * This routine can run only in process context. |
1111 | */ | 1111 | */ |
1112 | int usb_resume_both(struct usb_device *udev) | 1112 | static int usb_resume_both(struct usb_device *udev) |
1113 | { | 1113 | { |
1114 | int status = 0; | 1114 | int status = 0; |
1115 | int i; | 1115 | int i; |
@@ -1173,6 +1173,18 @@ int usb_resume_both(struct usb_device *udev) | |||
1173 | 1173 | ||
1174 | #ifdef CONFIG_USB_SUSPEND | 1174 | #ifdef CONFIG_USB_SUSPEND |
1175 | 1175 | ||
1176 | /* usb_autosuspend_work - callback routine to autosuspend a USB device */ | ||
1177 | void usb_autosuspend_work(struct work_struct *work) | ||
1178 | { | ||
1179 | struct usb_device *udev = | ||
1180 | container_of(work, struct usb_device, autosuspend.work); | ||
1181 | |||
1182 | usb_pm_lock(udev); | ||
1183 | udev->auto_pm = 1; | ||
1184 | usb_suspend_both(udev, PMSG_SUSPEND); | ||
1185 | usb_pm_unlock(udev); | ||
1186 | } | ||
1187 | |||
1176 | /* Internal routine to adjust a device's usage counter and change | 1188 | /* Internal routine to adjust a device's usage counter and change |
1177 | * its autosuspend state. | 1189 | * its autosuspend state. |
1178 | */ | 1190 | */ |
@@ -1405,6 +1417,11 @@ int usb_autopm_set_interface(struct usb_interface *intf) | |||
1405 | } | 1417 | } |
1406 | EXPORT_SYMBOL_GPL(usb_autopm_set_interface); | 1418 | EXPORT_SYMBOL_GPL(usb_autopm_set_interface); |
1407 | 1419 | ||
1420 | #else | ||
1421 | |||
1422 | void usb_autosuspend_work(struct work_struct *work) | ||
1423 | {} | ||
1424 | |||
1408 | #endif /* CONFIG_USB_SUSPEND */ | 1425 | #endif /* CONFIG_USB_SUSPEND */ |
1409 | 1426 | ||
1410 | static int usb_suspend(struct device *dev, pm_message_t message) | 1427 | static int usb_suspend(struct device *dev, pm_message_t message) |
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 54b42ce311c1..82338f497860 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -211,27 +211,6 @@ static void ksuspend_usb_cleanup(void) | |||
211 | destroy_workqueue(ksuspend_usb_wq); | 211 | destroy_workqueue(ksuspend_usb_wq); |
212 | } | 212 | } |
213 | 213 | ||
214 | #ifdef CONFIG_USB_SUSPEND | ||
215 | |||
216 | /* usb_autosuspend_work - callback routine to autosuspend a USB device */ | ||
217 | static void usb_autosuspend_work(struct work_struct *work) | ||
218 | { | ||
219 | struct usb_device *udev = | ||
220 | container_of(work, struct usb_device, autosuspend.work); | ||
221 | |||
222 | usb_pm_lock(udev); | ||
223 | udev->auto_pm = 1; | ||
224 | usb_suspend_both(udev, PMSG_SUSPEND); | ||
225 | usb_pm_unlock(udev); | ||
226 | } | ||
227 | |||
228 | #else | ||
229 | |||
230 | static void usb_autosuspend_work(struct work_struct *work) | ||
231 | {} | ||
232 | |||
233 | #endif /* CONFIG_USB_SUSPEND */ | ||
234 | |||
235 | #else | 214 | #else |
236 | 215 | ||
237 | #define ksuspend_usb_init() 0 | 216 | #define ksuspend_usb_init() 0 |
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h index 08b5a04e3755..b98bc0d381c0 100644 --- a/drivers/usb/core/usb.h +++ b/drivers/usb/core/usb.h | |||
@@ -34,8 +34,7 @@ extern void usb_host_cleanup(void); | |||
34 | 34 | ||
35 | #ifdef CONFIG_PM | 35 | #ifdef CONFIG_PM |
36 | 36 | ||
37 | extern int usb_suspend_both(struct usb_device *udev, pm_message_t msg); | 37 | extern void usb_autosuspend_work(struct work_struct *work); |
38 | extern int usb_resume_both(struct usb_device *udev); | ||
39 | extern int usb_port_suspend(struct usb_device *dev); | 38 | extern int usb_port_suspend(struct usb_device *dev); |
40 | extern int usb_port_resume(struct usb_device *dev); | 39 | extern int usb_port_resume(struct usb_device *dev); |
41 | 40 | ||
@@ -51,11 +50,6 @@ static inline void usb_pm_unlock(struct usb_device *udev) | |||
51 | 50 | ||
52 | #else | 51 | #else |
53 | 52 | ||
54 | #define usb_suspend_both(udev, msg) 0 | ||
55 | static inline int usb_resume_both(struct usb_device *udev) | ||
56 | { | ||
57 | return 0; | ||
58 | } | ||
59 | #define usb_port_suspend(dev) 0 | 53 | #define usb_port_suspend(dev) 0 |
60 | #define usb_port_resume(dev) 0 | 54 | #define usb_port_resume(dev) 0 |
61 | static inline void usb_pm_lock(struct usb_device *udev) {} | 55 | static inline void usb_pm_lock(struct usb_device *udev) {} |