summaryrefslogtreecommitdiff
path: root/drivers/usb/usbdcore.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2008-07-07 00:58:05 +0800
committerJohn Rigby <jrigby@freescale.com>2008-07-10 10:53:04 -0600
commitcc83b27217f7380041fea386ddb6d6d9b261617d (patch)
tree65f62ae3860b2d2b449447a5c22e2e6ad9872fcf /drivers/usb/usbdcore.c
parent06c53beae1a726e707971c555613f09b270a2461 (diff)
downloadu-boot-imx-cc83b27217f7380041fea386ddb6d6d9b261617d.zip
u-boot-imx-cc83b27217f7380041fea386ddb6d6d9b261617d.tar.gz
u-boot-imx-cc83b27217f7380041fea386ddb6d6d9b261617d.tar.bz2
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.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/usb/usbdcore.c b/drivers/usb/usbdcore.c
index 308c7ce..a621ce7 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;
}