Commit d837e219 authored by Sarah Sharp's avatar Sarah Sharp Committed by Greg Kroah-Hartman

USB: Use bInterfaceNumber in bandwidth allocations.

USB devices do not have to sort interfaces in their descriptors based on
the interface number, and they may choose to skip interface numbers.  The
USB bandwidth allocation code for installing a new configuration assumes
the for loop variable will match the interface number.  Make it use the
interface number (bInterfaceNumber) in the descriptor instead.
Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 46216e4f
...@@ -1670,11 +1670,16 @@ int usb_hcd_alloc_bandwidth(struct usb_device *udev, ...@@ -1670,11 +1670,16 @@ int usb_hcd_alloc_bandwidth(struct usb_device *udev,
} }
} }
for (i = 0; i < num_intfs; ++i) { for (i = 0; i < num_intfs; ++i) {
struct usb_host_interface *first_alt;
int iface_num;
first_alt = &new_config->intf_cache[i]->altsetting[0];
iface_num = first_alt->desc.bInterfaceNumber;
/* Set up endpoints for alternate interface setting 0 */ /* Set up endpoints for alternate interface setting 0 */
alt = usb_find_alt_setting(new_config, i, 0); alt = usb_find_alt_setting(new_config, iface_num, 0);
if (!alt) if (!alt)
/* No alt setting 0? Pick the first setting. */ /* No alt setting 0? Pick the first setting. */
alt = &new_config->intf_cache[i]->altsetting[0]; alt = first_alt;
for (j = 0; j < alt->desc.bNumEndpoints; j++) { for (j = 0; j < alt->desc.bNumEndpoints; j++) {
ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]); ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment