[ARM] tegra: usb_phy: Reset the ulpi phy on power off
authorBenoit Goby <benoit@android.com>
Tue, 14 Sep 2010 00:43:44 +0000 (17:43 -0700)
committerColin Cross <ccross@android.com>
Wed, 6 Oct 2010 23:28:36 +0000 (16:28 -0700)
Put the ulpi phy in reset on power off to save power in lp0.

Change-Id: I7d7441c1029b170ff24da7274d8404b4bcf1d9e9
Signed-off-by: Benoit Goby <benoit@android.com>
arch/arm/mach-tegra/usb_phy.c

index 7785b1ee41ec612d89d48f4598e4975a2b6b88a7..3e145f1bee1bc6b23b3e8456260ad35ba648acda 100644 (file)
@@ -556,27 +556,7 @@ static void ulpi_phy_power_off(struct tegra_usb_phy *phy)
 {
        unsigned long val;
        void __iomem *base = phy->regs;
-
-       /* Programming the ULPI register function control */
-       ulpi_viewport_write(phy, 0x04, 0x4D);
-
-       /* Resetting the ULPI register IndicatorPassThru */
-       ulpi_viewport_write(phy, 0x09, 0x40);
-
-       /* USB Interrupt Rising - making sure vbus comparator and id are off */
-       ulpi_viewport_write(phy, 0x0D, 0x00);
-
-       /* USB Interrupt Falling */
-       ulpi_viewport_write(phy, 0x10, 0x00);
-
-       /* Carkit Control */
-       ulpi_viewport_write(phy, 0x19, 0x00);
-
-       /* Disabling ID float Rise/Fall (Carkit Enable) */
-       ulpi_viewport_write(phy, 0x1D, 0x00);
-
-       /* USB I/O and power */
-       ulpi_viewport_write(phy, 0x39, 0x00);
+       struct tegra_ulpi_config *config = phy->config;
 
        /* Clear WKCN/WKDS/WKOC wake-on events that can cause the USB
         * Controller to immediately bring the ULPI PHY out of low power
@@ -585,6 +565,7 @@ static void ulpi_phy_power_off(struct tegra_usb_phy *phy)
        val &= ~(USB_PORTSC1_WKOC | USB_PORTSC1_WKDS | USB_PORTSC1_WKCN);
        writel(val, base + USB_PORTSC1);
 
+       gpio_direction_output(config->reset_gpio, 0);
        clk_disable(phy->clk);
 }