From bf62e341789311dffadefd5f1c1e340b59e6eff2 Mon Sep 17 00:00:00 2001 From: Hu hui Date: Mon, 26 Jul 2010 16:02:12 +0800 Subject: [PATCH] ENGR00125521 USB: register/unregister gadget module cause system hang In function of gadget unregister the phy will been put to lowpower mode,however in function of gadget regisger the phy lowpower mode will not been cleard when OTG pin detect enabled. Signed-off-by: Huhui (cherry picked from commit 11dc51645fe5a196f53fb30369698b4cb4d1e296) --- drivers/usb/gadget/arcotg_udc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/usb/gadget/arcotg_udc.c b/drivers/usb/gadget/arcotg_udc.c index aef2a0d4986..f4169027338 100644 --- a/drivers/usb/gadget/arcotg_udc.c +++ b/drivers/usb/gadget/arcotg_udc.c @@ -2204,14 +2204,15 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver) udc_controller->driver = driver; udc_controller->gadget.dev.driver = &driver->driver; spin_unlock_irqrestore(&udc_controller->lock, flags); -#ifndef CONFIG_USB_OTG - if (udc_controller->pdata->usb_clock_for_pm) - udc_controller->pdata->usb_clock_for_pm(true); - portsc = fsl_readl(&dr_regs->portsc1); - portsc &= ~PORTSCX_PHY_LOW_POWER_SPD; - fsl_writel(portsc, &dr_regs->portsc1); -#endif + if (!device_may_wakeup(udc_controller->gadget.dev.parent)) { + if (udc_controller->pdata->usb_clock_for_pm) + udc_controller->pdata->usb_clock_for_pm(true); + + portsc = fsl_readl(&dr_regs->portsc1); + portsc &= ~PORTSCX_PHY_LOW_POWER_SPD; + fsl_writel(portsc, &dr_regs->portsc1); + } /* bind udc driver to gadget driver */ retval = driver->bind(&udc_controller->gadget); if (retval) {