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