summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHu hui <b29976@freescale.com>2010-07-26 16:02:12 +0800
committerLily Zhang <r58066@freescale.com>2010-07-26 16:32:00 +0800
commit0927b9f3e2d70e67ad4efe965ad9ff72e266ec65 (patch)
tree7ddd19400bd4a56cee0a00f9878f78e49cb842a6
parent6bbc17cf7e3ea7667c0d70732e9563bfcaca7736 (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> (cherry picked from commit 11dc51645fe5a196f53fb30369698b4cb4d1e296)
-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 aef2a0d49860..f41690273385 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) {