diff options
-rw-r--r-- | arch/arm/mach-tegra/usb_phy.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/usb_phy.c b/arch/arm/mach-tegra/usb_phy.c index bcc5cc464eb6..7318d95e7317 100644 --- a/arch/arm/mach-tegra/usb_phy.c +++ b/arch/arm/mach-tegra/usb_phy.c @@ -933,8 +933,23 @@ static void uhsic_phy_power_on(struct tegra_usb_phy *phy) static void uhsic_phy_power_off(struct tegra_usb_phy *phy) { + unsigned long val; + void __iomem *base = phy->regs; + + val = readl(base + UHSIC_PADS_CFG1); + val &= ~UHSIC_RPU_STROBE; + val |= UHSIC_RPD_STROBE; + writel(val, base + UHSIC_PADS_CFG1); + + val = readl(base + USB_SUSP_CTRL); + val |= UHSIC_RESET; + writel(val, base + USB_SUSP_CTRL); + udelay(30); + + val = readl(base + USB_SUSP_CTRL); + val &= ~UHSIC_PHY_ENABLE; + writel(val, base + USB_SUSP_CTRL); - /* Do not do any thing here */ } struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs, |