This function was searching all interface alternate settings, when it
should only search the active alternate setting.

The same endpoint (number) can exist on multiple alternate settings, with
a different descriptor for each.  Only the active alternate setting's
endpoint descriptor is valid.

The only place currently using it is devio.c in proc_submiturb (for async
control xfers).



--- 2.4.4-clean/drivers/usb/usb.c       Wed Apr 25 17:10:47 2001
+++ linux/drivers/usb/usb.c     Sat May 12 15:47:58 2001
@@ -202,11 +202,12 @@
 {
        int i, j, k;
 
-       for (i = 0; i < dev->actconfig->bNumInterfaces; i++)
-               for (j = 0; j < dev->actconfig->interface[i].num_altsetting; j++)
-                       for (k = 0; k < 
dev->actconfig->interface[i].altsetting[j].bNumEndpoints; k++)
-                               if (epnum == 
dev->actconfig->interface[i].altsetting[j].endpoint[k].bEndpointAddress)
-                                       return 
&dev->actconfig->interface[i].altsetting[j].endpoint[k];
+       for (i = 0; i < dev->actconfig->bNumInterfaces; i++) {
+               j = dev->actconfig->interface[i].act_altsetting;
+               for (k = 0; k < 
+dev->actconfig->interface[i].altsetting[j].bNumEndpoints; k++)
+                       if (epnum == 
+dev->actconfig->interface[i].altsetting[j].endpoint[k].bEndpointAddress)
+                               return 
+&dev->actconfig->interface[i].altsetting[j].endpoint[k];
+       }
 
        return NULL;
 }



_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to