diff options
author | Harald Welte <laforge@gnumonks.org> | 2008-07-07 00:58:05 +0800 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2008-07-10 11:51:52 +0200 |
commit | e73b5212e0463a3db0af0a5c95c75bfb762ca973 (patch) | |
tree | 01011b40e467bcc71a1573b556e5b73c187d7aab /drivers/usb/usbdcore.c | |
parent | c4b81f3238d77a4df343bd70ddfb7ebd29ca1dda (diff) | |
download | blackbird-obmc-uboot-e73b5212e0463a3db0af0a5c95c75bfb762ca973.tar.gz blackbird-obmc-uboot-e73b5212e0463a3db0af0a5c95c75bfb762ca973.zip |
fix USB devices with multiple configurations
This patch fixes bugs in usbdcore*.c related to the use of devices
with multiple configurations.
The original code made mistakes about the meaning of configuration value and
configuration index, and the resulting off-by-one errors resulted in:
* SET_CONFIGURATION always selected the first configuration, no matter what
wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first
configuration (index 0).
Signed-off-by: Harald Welte <laforge@openmoko.org>
Acked-by: Markus Klotzbuecher <mk@denx.de>
Diffstat (limited to 'drivers/usb/usbdcore.c')
-rw-r--r-- | drivers/usb/usbdcore.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/usb/usbdcore.c b/drivers/usb/usbdcore.c index 308c7ceccc..a621ce7a39 100644 --- a/drivers/usb/usbdcore.c +++ b/drivers/usb/usbdcore.c @@ -146,12 +146,9 @@ struct usb_string_descriptor *usbd_get_string (__u8 index) static struct usb_configuration_instance *usbd_device_configuration_instance (struct usb_device_instance *device, unsigned int port, unsigned int configuration) { - /* XXX */ - configuration = configuration ? configuration - 1 : 0; - - if (configuration >= device->configurations) { + if (configuration >= device->configurations) return NULL; - } + return device->configuration_instance_array + configuration; } |