From f7a800483296dc29d846d232b58ba7c694e7baab Mon Sep 17 00:00:00 2001 From: Seshendra Gadagottu Date: Fri, 18 Feb 2011 22:28:44 +0530 Subject: arch: arm: usb_phy: support for HSIC power off Fixing the hsic re-enumeration issue by adding missing code in ushic_phy_power_off function. BUG 790888 Change-Id: I56c280acee2fd6ae6719c6802d14975840ef1d53 Reviewed-on: http://git-master/r/19304 Tested-by: Seshendra Gadagottu Reviewed-by: Kaushik Sen Reviewed-by: Hanumanth Venkateswa Moganty Reviewed-by: Shail Dave --- arch/arm/mach-tegra/usb_phy.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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, -- cgit v1.2.3