diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 10330ff2855d..da874c744f6f 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -1647,6 +1647,28 @@ static void configfs_composite_disconnect(struct usb_gadget *gadget) #endif // CONFIG_USB_CONFIGFS_UEVENT +static void configfs_composite_reset(struct usb_gadget *gadget) +{ + struct usb_composite_dev *cdev; + struct gadget_info *gi; + unsigned long flags; + + cdev = get_gadget_data(gadget); + if (!cdev) + return; + + gi = container_of(cdev, struct gadget_info, cdev); + spin_lock_irqsave(&gi->spinlock, flags); + cdev = get_gadget_data(gadget); + if (!cdev || gi->unbind) { + spin_unlock_irqrestore(&gi->spinlock, flags); + return; + } + + composite_reset(gadget); + spin_unlock_irqrestore(&gi->spinlock, flags); +} + static void configfs_composite_suspend(struct usb_gadget *gadget) { struct usb_composite_dev *cdev; @@ -1701,7 +1723,7 @@ static const struct usb_gadget_driver configfs_driver_template = { .disconnect = android_disconnect, #else .setup = configfs_composite_setup, - .reset = configfs_composite_disconnect, + .reset = configfs_composite_reset, .disconnect = configfs_composite_disconnect, #endif .suspend = configfs_composite_suspend,