summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVenkat Moganty <vmoganty@nvidia.com>2010-04-21 19:57:32 +0530
committerGary King <gking@nvidia.com>2010-04-21 14:22:24 -0700
commitc8902bbab78d5db92547ee9c2e5aa4c91530e304 (patch)
tree3c9965198a2508b2ea9dcc8c68863856011a0ec9 /drivers
parent0de8eb33344ed2d4b36d3c82babdef6cd1ff1fb2 (diff)
fsl-udc:Fix USB1 resume after LP0
USB1 registers are set to default values after entering into the LP0. On LP0 resume, controller was not programmed properly, which is causing device to fail enumeration. This is fixed by reinitializing the controller on LP0 resume. Bug 677511: USB1 fails to enumerate after LP0 Tested on android/whistler/adb, USB device is working fine on resume from LP0. Change-Id: I55af61b23bec3436d1672e8c58aee8d7b8f6bcb3 Reviewed-on: http://git-master/r/1175 Reviewed-by: Ramachandrudu Kandhala <rkandhala@nvidia.com> Tested-by: Ramachandrudu Kandhala <rkandhala@nvidia.com> Reviewed-by: Narendra Damahe <ndamahe@nvidia.com> Tested-by: Narendra Damahe <ndamahe@nvidia.com> Reviewed-by: Gary King <gking@nvidia.com>
Diffstat (limited to 'drivers')
-rwxr-xr-xdrivers/usb/gadget/fsl_udc_core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 23429f576199..199034307a37 100755
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -2757,6 +2757,9 @@ static int fsl_udc_resume(struct platform_device *pdev)
}
}
platform_udc_clk_resume();
+#if defined(CONFIG_ARCH_TEGRA)
+ fsl_udc_restart(udc_controller);
+#else
/* Enable DR irq reg and set controller Run */
if (udc_controller->stopped) {
dr_controller_setup(udc_controller);
@@ -2765,7 +2768,7 @@ static int fsl_udc_resume(struct platform_device *pdev)
udc_controller->usb_state = USB_STATE_ATTACHED;
udc_controller->ep0_state = WAIT_FOR_SETUP;
udc_controller->ep0_dir = 0;
-
+#endif
/* Power down the phy if cable is not connected */
if (!(fsl_readl(&usb_sys_regs->vbus_wakeup) & USB_SYS_VBUS_STATUS))
platform_udc_clk_suspend();