diff options
author | Venkat Moganty <vmoganty@nvidia.com> | 2010-04-21 19:57:32 +0530 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-04-21 14:22:24 -0700 |
commit | c8902bbab78d5db92547ee9c2e5aa4c91530e304 (patch) | |
tree | 3c9965198a2508b2ea9dcc8c68863856011a0ec9 /drivers | |
parent | 0de8eb33344ed2d4b36d3c82babdef6cd1ff1fb2 (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-x | drivers/usb/gadget/fsl_udc_core.c | 5 |
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(); |