}
                }
                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 */
-                       alt = usb_find_alt_setting(new_config, i, 0);
+                       alt = usb_find_alt_setting(new_config, iface_num, 0);
                        if (!alt)
                                /* 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++) {
                                ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);