aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2007-05-04 11:53:03 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-07-12 19:29:47 -0400
commit6bc6cff52e0c4c4c876b1b8a5750041da61ad42b (patch)
tree98b6815b071be2b0dc8e10b661a7fb1e3cdd9e82 /drivers
parent383975d765523a56dc43a6cd6d52e9b376800cf2 (diff)
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/core/driver.c4
-rw-r--r--drivers/usb/core/hub.c5
-rw-r--r--drivers/usb/core/quirks.c3
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 12dd986bdffd..02d6db61c940 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -24,6 +24,7 @@
24 24
25#include <linux/device.h> 25#include <linux/device.h>
26#include <linux/usb.h> 26#include <linux/usb.h>
27#include <linux/usb/quirks.h>
27#include <linux/workqueue.h> 28#include <linux/workqueue.h>
28#include "hcd.h" 29#include "hcd.h"
29#include "usb.h" 30#include "usb.h"
@@ -835,6 +836,9 @@ static int usb_resume_device(struct usb_device *udev)
835 goto done; 836 goto done;
836 } 837 }
837 838
839 if (udev->quirks & USB_QUIRK_RESET_RESUME)
840 udev->reset_resume = 1;
841
838 udriver = to_usb_device_driver(udev->dev.driver); 842 udriver = to_usb_device_driver(udev->dev.driver);
839 status = udriver->resume(udev); 843 status = udriver->resume(udev);
840 844
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 51d2d304568b..d37ad083d5ef 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -2939,6 +2939,11 @@ static int config_descriptors_changed(struct usb_device *udev)
2939 * this from a driver probe() routine after downloading new firmware. 2939 * this from a driver probe() routine after downloading new firmware.
2940 * For calls that might not occur during probe(), drivers should lock 2940 * For calls that might not occur during probe(), drivers should lock
2941 * the device using usb_lock_device_for_reset(). 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 */
2943int usb_reset_device(struct usb_device *udev) 2948int usb_reset_device(struct usb_device *udev)
2944{ 2949{
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 739f520908aa..f37fa012f329 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -35,6 +35,9 @@ static const struct usb_device_id usb_quirk_list[] = {
35 /* Elsa MicroLink 56k (V.250) */ 35 /* Elsa MicroLink 56k (V.250) */
36 { USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_NO_AUTOSUSPEND }, 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 { } /* terminating entry must be last */ 41 { } /* terminating entry must be last */
39}; 42};
40 43