diff options
author | Tony LIU <junjie.liu@freescale.com> | 2012-03-07 15:53:56 +0800 |
---|---|---|
committer | Tony LIU <junjie.liu@freescale.com> | 2012-03-21 09:59:53 +0800 |
commit | 69d533be68e085039d0561f469dbd7c3c3a259b5 (patch) | |
tree | 6f4740ca1a814db88e0f32c44f9efd272549d033 /arch/arm/plat-mxc/usb_common.c | |
parent | 0389030201f91bff05c3f28a2feb2605d558f9a8 (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-x | arch/arm/plat-mxc/usb_common.c | 23 |
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 |