Commit 6bc6cff52e0c4c4c876b1b8a5750041da61ad42b
Committed by
Greg Kroah-Hartman
1 parent
383975d765
Exists in
master
and in
7 other branches
USB: add RESET_RESUME device quirk
This patch (as888) adds a new USB device quirk for devices which are unable to resume correctly. By using the new code added for the USB-persist facility, it is a simple matter to reset these devices instead of resuming them. To get things kicked off, a quirk entry is added for the Philips PSC805. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Showing 4 changed files with 15 additions and 0 deletions Side-by-side Diff
drivers/usb/core/driver.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | |
25 | 25 | #include <linux/device.h> |
26 | 26 | #include <linux/usb.h> |
27 | +#include <linux/usb/quirks.h> | |
27 | 28 | #include <linux/workqueue.h> |
28 | 29 | #include "hcd.h" |
29 | 30 | #include "usb.h" |
... | ... | @@ -834,6 +835,9 @@ |
834 | 835 | status = -ENOTCONN; |
835 | 836 | goto done; |
836 | 837 | } |
838 | + | |
839 | + if (udev->quirks & USB_QUIRK_RESET_RESUME) | |
840 | + udev->reset_resume = 1; | |
837 | 841 | |
838 | 842 | udriver = to_usb_device_driver(udev->dev.driver); |
839 | 843 | status = udriver->resume(udev); |
drivers/usb/core/hub.c
... | ... | @@ -2939,6 +2939,11 @@ |
2939 | 2939 | * this from a driver probe() routine after downloading new firmware. |
2940 | 2940 | * For calls that might not occur during probe(), drivers should lock |
2941 | 2941 | * the device using usb_lock_device_for_reset(). |
2942 | + * | |
2943 | + * Locking exception: This routine may also be called from within an | |
2944 | + * autoresume handler. Such usage won't conflict with other tasks | |
2945 | + * holding the device lock because these tasks should always call | |
2946 | + * usb_autopm_resume_device(), thereby preventing any unwanted autoresume. | |
2942 | 2947 | */ |
2943 | 2948 | int usb_reset_device(struct usb_device *udev) |
2944 | 2949 | { |
drivers/usb/core/quirks.c
... | ... | @@ -35,6 +35,9 @@ |
35 | 35 | /* Elsa MicroLink 56k (V.250) */ |
36 | 36 | { USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_NO_AUTOSUSPEND }, |
37 | 37 | |
38 | + /* Philips PSC805 audio device */ | |
39 | + { USB_DEVICE(0x0471, 0x0155), .driver_info = USB_QUIRK_RESET_RESUME }, | |
40 | + | |
38 | 41 | { } /* terminating entry must be last */ |
39 | 42 | }; |
40 | 43 |
include/linux/usb/quirks.h