aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHu hui <b29976@freescale.com>2010-07-26 16:02:12 +0800
committerHuhui <b29976@freescale.com>2010-07-26 16:02:12 +0800
commit11dc51645fe5a196f53fb30369698b4cb4d1e296 (patch)
tree5f69e16af7c18d9bbe688721ec92572c5fd9c8fc
parentaceea32a54b8aa248d771b589d46ce8fbe3c2806 (diff)
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 <b29976@freescale.com>
-rw-r--r--drivers/usb/gadget/arcotg_udc.c15
1 files 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) {