@@ -701,9 +701,6 @@ EXPORT_SYMBOL_GPL(usb_gadget_connect);
701701 * as a disconnect (when a VBUS session is active). Not all systems
702702 * support software pullup controls.
703703 *
704- * Following a successful disconnect, invoke the ->disconnect() callback
705- * for the current gadget driver so that UDC drivers don't need to.
706- *
707704 * Returns zero on success, else negative errno.
708705 */
709706int usb_gadget_disconnect (struct usb_gadget * gadget )
@@ -725,10 +722,8 @@ int usb_gadget_disconnect(struct usb_gadget *gadget)
725722 }
726723
727724 ret = gadget -> ops -> pullup (gadget , 0 );
728- if (!ret ) {
725+ if (!ret )
729726 gadget -> connected = 0 ;
730- gadget -> udc -> driver -> disconnect (gadget );
731- }
732727
733728out :
734729 trace_usb_gadget_disconnect (gadget , ret );
@@ -1297,6 +1292,7 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
12971292 kobject_uevent (& udc -> dev .kobj , KOBJ_CHANGE );
12981293
12991294 usb_gadget_disconnect (udc -> gadget );
1295+ udc -> driver -> disconnect (udc -> gadget );
13001296 udc -> driver -> unbind (udc -> gadget );
13011297 usb_gadget_udc_stop (udc );
13021298
@@ -1486,6 +1482,7 @@ static ssize_t soft_connect_store(struct device *dev,
14861482 usb_gadget_connect (udc -> gadget );
14871483 } else if (sysfs_streq (buf , "disconnect" )) {
14881484 usb_gadget_disconnect (udc -> gadget );
1485+ udc -> driver -> disconnect (udc -> gadget );
14891486 usb_gadget_udc_stop (udc );
14901487 } else {
14911488 dev_err (dev , "unsupported command '%s'\n" , buf );
0 commit comments