--- x/drivers/usb/atm/ueagle-atm.c +++ y/drivers/usb/atm/ueagle-atm.c @@ -2605,9 +2605,11 @@ static void uea_disconnect(struct usb_in usbatm_usb_disconnect(intf); mutex_unlock(&uea_mutex); uea_info(usb, "ADSL device removed\n"); - } else if (usb->config->desc.bNumInterfaces == 1) { + } else { struct completion *fw_done = usb_get_intfdata(intf); + if (!fw_done) + return; uea_dbg(usb, "pre-firmware device, waiting firmware upload\n"); wait_for_completion(fw_done); uea_dbg(usb, "pre-firmware device, finished waiting\n");