diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-02-08 16:40:43 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-02-16 15:32:21 -0800 |
commit | 3f141e2aed586c41c2666d49c70c1c1bbb6d6abd (patch) | |
tree | d7308c465ec658fd09b5f6969ccf8a8e9b48f131 /drivers/usb/core/generic.c | |
parent | d1bbb60007597b920beca72cd0b413d10290310a (diff) | |
download | talos-obmc-linux-3f141e2aed586c41c2666d49c70c1c1bbb6d6abd.tar.gz talos-obmc-linux-3f141e2aed586c41c2666d49c70c1c1bbb6d6abd.zip |
USB: unconfigure devices which have config 0
Some USB devices do have a configuration 0, in contravention of the
USB spec. Normally 0 is supposed to indicate that a device is
unconfigured.
While we can't change what the device is doing, we can change usbcore.
This patch (as852) allows usb_set_configuration() to accept a config
value of -1 as indicating that the device should be unconfigured. The
request actually sent to the device will still contain 0 as the value.
But even if the device does have a configuration 0, dev->actconfig
will be set to NULL and dev->state will be set to USB_STATE_ADDRESS.
Without some sort of special-case handling like this, there is no way
to unconfigure these non-compliant devices.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/core/generic.c')
-rw-r--r-- | drivers/usb/core/generic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index b531a4fd30c2..9bbcb20e2d94 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c @@ -184,7 +184,7 @@ static void generic_disconnect(struct usb_device *udev) /* if this is only an unbind, not a physical disconnect, then * unconfigure the device */ if (udev->actconfig) - usb_set_configuration(udev, 0); + usb_set_configuration(udev, -1); usb_remove_sysfs_dev_files(udev); } |