void usb_composite_force_reset(struct usb_composite_dev *cdev) { unsigned long flags; spin_lock_irqsave(&cdev->lock, flags); /* force reenumeration */ if (cdev && cdev->gadget && cdev->gadget->speed != USB_SPEED_UNKNOWN) { spin_unlock_irqrestore(&cdev->lock, flags); CSY_DBG_ESS("disconnect usb\n"); usb_gadget_disconnect(cdev->gadget); msleep(10); CSY_DBG_ESS("connect usb again\n"); usb_gadget_connect(cdev->gadget); } else { CSY_DBG_ESS("skip reset\n"); spin_unlock_irqrestore(&cdev->lock, flags); } }
void usb_composite_force_reset(struct usb_composite_dev *cdev) { unsigned long flags; spin_lock_irqsave(&cdev->lock, flags); /* force reenumeration */ if (cdev && cdev->gadget && cdev->gadget->speed != USB_SPEED_UNKNOWN) { /* avoid sending a disconnect switch event until after we disconnect */ cdev->mute_switch = 1; spin_unlock_irqrestore(&cdev->lock, flags); CSY_DBG_ESS("disconnect usb\n"); usb_gadget_disconnect(cdev->gadget); msleep(20); CSY_DBG_ESS("connect usb again\n"); usb_gadget_connect(cdev->gadget); } else { CSY_DBG_ESS("skip reset\n"); spin_unlock_irqrestore(&cdev->lock, flags); } }