summaryrefslogtreecommitdiff
path: root/arch/arm/plat-mxc/usb_common.c
diff options
context:
space:
mode:
authorTony LIU <junjie.liu@freescale.com>2012-03-07 15:53:56 +0800
committerTony LIU <junjie.liu@freescale.com>2012-03-21 09:59:53 +0800
commit69d533be68e085039d0561f469dbd7c3c3a259b5 (patch)
tree6f4740ca1a814db88e0f32c44f9efd272549d033 /arch/arm/plat-mxc/usb_common.c
parent0389030201f91bff05c3f28a2feb2605d558f9a8 (diff)
ENGR00176299-1 usb host suspend/resume can't work randomly
MSL part - after suspend bit is set, we need to set PWD bit and clear it right now to let PHY know the state change - after suspend bit is set, disconnect detection should be clear - after set resume bit, disconnect detection should be set after 30 ms - IC issue PDM refer to TKT092876 TKT092872 Signed-off-by: Tony LIU <junjie.liu@freescale.com>
Diffstat (limited to 'arch/arm/plat-mxc/usb_common.c')
-rwxr-xr-xarch/arm/plat-mxc/usb_common.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/arch/arm/plat-mxc/usb_common.c b/arch/arm/plat-mxc/usb_common.c
index bb9c45a0127e..a4a3721246f8 100755
--- a/arch/arm/plat-mxc/usb_common.c
+++ b/arch/arm/plat-mxc/usb_common.c
@@ -900,16 +900,25 @@ EXPORT_SYMBOL(usb_event_is_otg_wakeup);
void fsl_platform_set_usb_phy_dis(struct fsl_usb2_platform_data *pdata,
bool enable)
{
+ u32 usb_phy_ctrl_dcdt = 0;
/* for HSIC, we do not need to enable disconnect detection */
if (pdata->phy_mode == FSL_USB2_PHY_HSIC)
return;
-
- if (enable)
- __raw_writel(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
- MX6_IO_ADDRESS(pdata->phy_regs) + HW_USBPHY_CTRL_SET);
- else
- __raw_writel(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
- MX6_IO_ADDRESS(pdata->phy_regs) + HW_USBPHY_CTRL_CLR);
+ usb_phy_ctrl_dcdt = __raw_readl(
+ MX6_IO_ADDRESS(pdata->phy_regs) + HW_USBPHY_CTRL) &
+ BM_USBPHY_CTRL_ENHOSTDISCONDETECT;
+ if (enable) {
+ if (usb_phy_ctrl_dcdt == 0)
+ __raw_writel(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
+ MX6_IO_ADDRESS(pdata->phy_regs)
+ + HW_USBPHY_CTRL_SET);
+ } else {
+ if (usb_phy_ctrl_dcdt
+ == BM_USBPHY_CTRL_ENHOSTDISCONDETECT)
+ __raw_writel(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
+ MX6_IO_ADDRESS(pdata->phy_regs)
+ + HW_USBPHY_CTRL_CLR);
+ }
}
EXPORT_SYMBOL(fsl_platform_set_usb_phy_dis);
#endif