ARM: tegra: usb_phy: Disable disconnect detection during resume
authorJay Cheng <jacheng@nvidia.com>
Mon, 22 Nov 2010 16:03:52 +0000 (11:03 -0500)
committerBenoit Goby <benoit@android.com>
Mon, 22 Nov 2010 21:05:38 +0000 (13:05 -0800)
Change-Id: I30a45dc7e7a87773a93c128877d0f0827e5d44b7
Signed-off-by: Jay Cheng <jacheng@nvidia.com>
arch/arm/mach-tegra/include/mach/usb_phy.h
arch/arm/mach-tegra/usb_phy.c

index 71f1b9fa76db462392d40e8d9f962095ef824272..8b4beae773a7cd6df0f7b3d971fa340a485f0bd7 100644 (file)
@@ -79,6 +79,10 @@ int tegra_usb_phy_clk_enable(struct tegra_usb_phy *phy);
 
 int tegra_usb_phy_power_off(struct tegra_usb_phy *phy);
 
+int tegra_usb_phy_preresume(struct tegra_usb_phy *phy);
+
+int tegra_usb_phy_postresume(struct tegra_usb_phy *phy);
+
 int tegra_usb_phy_close(struct tegra_usb_phy *phy);
 
 #endif //__MACH_USB_PHY_H
index dffabc3ec063c2950db5b90f2f443a59c1100a7c..26605d9c2c0f6004e3425307dfb91c97eddef3cb 100644 (file)
@@ -347,8 +347,6 @@ static void utmi_phy_power_on(struct tegra_usb_phy *phy)
 
        val = readl(base + UTMIP_TX_CFG0);
        val &= ~UTMIP_FS_PREABMLE_J;
-       if (phy->instance == 2)
-               val |= UTMIP_HS_DISCON_DISABLE;
        writel(val, base + UTMIP_TX_CFG0);
 
        val = readl(base + UTMIP_HSRX_CFG0);
@@ -481,6 +479,26 @@ static void utmi_phy_power_off(struct tegra_usb_phy *phy)
        utmip_pad_power_off(phy);
 }
 
+static void utmi_phy_preresume(struct tegra_usb_phy *phy)
+{
+       unsigned long val;
+       void __iomem *base = phy->regs;
+
+       val = readl(base + UTMIP_TX_CFG0);
+       val |= UTMIP_HS_DISCON_DISABLE;
+       writel(val, base + UTMIP_TX_CFG0);
+}
+
+static void utmi_phy_postresume(struct tegra_usb_phy *phy)
+{
+       unsigned long val;
+       void __iomem *base = phy->regs;
+
+       val = readl(base + UTMIP_TX_CFG0);
+       val &= ~UTMIP_HS_DISCON_DISABLE;
+       writel(val, base + UTMIP_TX_CFG0);
+}
+
 static void ulpi_viewport_write(struct tegra_usb_phy *phy, u8 addr, u8 data)
 {
        unsigned long val;
@@ -672,6 +690,20 @@ int tegra_usb_phy_power_off(struct tegra_usb_phy *phy)
        return 0;
 }
 
+int tegra_usb_phy_preresume(struct tegra_usb_phy *phy)
+{
+       if (phy->instance == 2)
+               utmi_phy_preresume(phy);
+       return 0;
+}
+
+int tegra_usb_phy_postresume(struct tegra_usb_phy *phy)
+{
+       if (phy->instance == 2)
+               utmi_phy_postresume(phy);
+       return 0;
+}
+
 int tegra_usb_phy_clk_disable(struct tegra_usb_phy *phy)
 {
        if (phy->instance != 1)