Resolve synchronization issue between host and gadget drivers upon role-reversal Signed-off-by: Ramneek Mehresh <ramneek.mehresh@xxxxxxxxxxxxx> Reviewed-by: Li Yang-R58472 <LeoLi@xxxxxxxxxxxxx> Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@xxxxxxxxxxxxx> Tested-by: Fleming Andrew-AFLEMING <AFLEMING@xxxxxxxxxxxxx> --- drivers/usb/phy/phy-fsl-usb.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/usb/phy/phy-fsl-usb.c b/drivers/usb/phy/phy-fsl-usb.c index ce40d5c..a3a578d 100644 --- a/drivers/usb/phy/phy-fsl-usb.c +++ b/drivers/usb/phy/phy-fsl-usb.c @@ -544,8 +544,17 @@ int fsl_otg_start_gadget(struct otg_fsm *fsm, int on) dev = otg->gadget->dev.parent; if (on) { - if (dev->driver->resume) + /* Delay gadget resume to synchronize between host and gadget + * drivers. Upon role-reversal host drv is shutdown by kernel + * worker thread. By the time host drv shuts down, controller + * gets programmed for gadget role. Shutting host drv after + * this results in controller getting reset, and it stops + * responding to otg events + */ + if (dev->driver->resume) { + msleep(1000); dev->driver->resume(dev); + } } else { if (dev->driver->suspend) dev->driver->suspend(dev, otg_suspend_state); -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html