|
@@ -550,6 +550,21 @@ int usb_driver_claim_interface(struct usb_driver *driver,
|
|
|
if (device_is_registered(dev))
|
|
|
retval = device_bind_driver(dev);
|
|
|
|
|
|
+ if (retval) {
|
|
|
+ dev->driver = NULL;
|
|
|
+ usb_set_intfdata(iface, NULL);
|
|
|
+ iface->needs_remote_wakeup = 0;
|
|
|
+ iface->condition = USB_INTERFACE_UNBOUND;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Unbound interfaces are always runtime-PM-disabled
|
|
|
+ * and runtime-PM-suspended
|
|
|
+ */
|
|
|
+ if (driver->supports_autosuspend)
|
|
|
+ pm_runtime_disable(dev);
|
|
|
+ pm_runtime_set_suspended(dev);
|
|
|
+ }
|
|
|
+
|
|
|
return retval;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(usb_driver_claim_interface);
|