USB: unconfigure devices which have config 0
authorAlan Stern <stern@rowland.harvard.edu>
Thu, 8 Feb 2007 21:40:43 +0000 (16:40 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 16 Feb 2007 23:32:21 +0000 (15:32 -0800)
commit3f141e2aed586c41c2666d49c70c1c1bbb6d6abd
treed7308c465ec658fd09b5f6969ccf8a8e9b48f131
parentd1bbb60007597b920beca72cd0b413d10290310a
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>
drivers/usb/core/devio.c
drivers/usb/core/generic.c
drivers/usb/core/message.c
drivers/usb/core/sysfs.c