diff options
author | Vinod Atyam <vatyam@nvidia.com> | 2012-06-20 23:06:37 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-06-27 15:15:09 -0700 |
commit | bdf416ebd0dcca569fdac1bb4230177310534be0 (patch) | |
tree | d00f1116431d351323101c4201e0e0283b872099 | |
parent | 4d2a8be9772cc2e236bb57b1c734828f1229e632 (diff) |
ARM: tegra: usb_phy: Fix for glitch on STROBE line
Observed glitch on STROBE line during HSIC resume.
This is because after removing the TX circuit power down,
HSIC controller is keeping in reset to program
phy parameters. TX circuit is driving low on STROBE line until
controller removed out of reset.
Now corrected the code to remove power down after setting phy
parameters and removed the reset on HSIC controller.
Bug 991709
Change-Id: I4966ea92752d2e5c6ea7042a6c5fb8707cf6bb35
Signed-off-by: Vinod Atyam <vatyam@nvidia.com>
Reviewed-on: http://git-master/r/110112
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/tegra3_usb_phy.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/arm/mach-tegra/tegra3_usb_phy.c b/arch/arm/mach-tegra/tegra3_usb_phy.c index 85fb3db316d0..1922c0b134ad 100644 --- a/arch/arm/mach-tegra/tegra3_usb_phy.c +++ b/arch/arm/mach-tegra/tegra3_usb_phy.c @@ -2106,16 +2106,15 @@ static int uhsic_phy_power_on(struct tegra_usb_phy *phy) } val = readl(base + UHSIC_PADS_CFG1); - val &= ~(UHSIC_PD_BG | UHSIC_PD_TX | UHSIC_PD_TRK | UHSIC_PD_RX | + val &= ~(UHSIC_PD_BG | UHSIC_PD_TRK | UHSIC_PD_RX | UHSIC_PD_ZI | UHSIC_RPD_DATA | UHSIC_RPD_STROBE); - val |= UHSIC_RX_SEL; + val |= (UHSIC_RX_SEL | UHSIC_PD_TX); writel(val, base + UHSIC_PADS_CFG1); - udelay(2); val = readl(base + USB_SUSP_CTRL); val |= UHSIC_RESET; writel(val, base + USB_SUSP_CTRL); - udelay(30); + udelay(1); val = readl(base + USB_SUSP_CTRL); val |= UHSIC_PHY_ENABLE; @@ -2154,7 +2153,11 @@ static int uhsic_phy_power_on(struct tegra_usb_phy *phy) val = readl(base + USB_SUSP_CTRL); val &= ~(UHSIC_RESET); writel(val, base + USB_SUSP_CTRL); - udelay(2); + udelay(1); + + val = readl(base + UHSIC_PADS_CFG1); + val &= ~(UHSIC_PD_TX); + writel(val, base + UHSIC_PADS_CFG1); val = readl(base + USB_USBMODE); val |= USB_USBMODE_HOST; |