EXYNOS: Add power Enable/Disable for USB-EHCI
authorRajeshwari Shinde <rajeshwari.s@samsung.com>
Mon, 14 May 2012 05:52:03 +0000 (05:52 +0000)
committerMarek Vasut <marex@denx.de>
Mon, 9 Jul 2012 16:27:55 +0000 (18:27 +0200)
This patch adds functions to enable/disable the power of USB
host controller for EXYNOS5.

Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com>
Signed-off-by: Che-Liang Chiou <clchiou@chromium.org>
Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com>
arch/arm/cpu/armv7/exynos/power.c
arch/arm/include/asm/arch-exynos/power.h
drivers/usb/host/ehci-exynos.c

index c765304fd5fd56f5043b80272789f5db41a9beb5..4116781a36aad71ba46c7afa59b60954a74ce8fc 100644 (file)
@@ -52,3 +52,25 @@ void set_mipi_phy_ctrl(unsigned int dev_index, unsigned int enable)
        if (cpu_is_exynos4())
                exynos4_mipi_phy_control(dev_index, enable);
 }
+
+void exynos5_set_usbhost_phy_ctrl(unsigned int enable)
+{
+       struct exynos5_power *power =
+               (struct exynos5_power *)samsung_get_base_power();
+
+       if (enable) {
+               /* Enabling USBHOST_PHY */
+               setbits_le32(&power->usbhost_phy_control,
+                               POWER_USB_HOST_PHY_CTRL_EN);
+       } else {
+               /* Disabling USBHOST_PHY */
+               clrbits_le32(&power->usbhost_phy_control,
+                               POWER_USB_HOST_PHY_CTRL_EN);
+       }
+}
+
+void set_usbhost_phy_ctrl(unsigned int enable)
+{
+       if (cpu_is_exynos5())
+               exynos5_set_usbhost_phy_ctrl(enable);
+}
index 4236bebdf788babe138967e5aaf1b464a591e744..e5467e242defdb3d23af48d5345c501a50829a24 100644 (file)
@@ -855,4 +855,8 @@ void set_mipi_phy_ctrl(unsigned int dev_index, unsigned int enable);
 #define EXYNOS_MIPI_PHY_SRESETN                (1 << 1)
 #define EXYNOS_MIPI_PHY_MRESETN                (1 << 2)
 
+void set_usbhost_phy_ctrl(unsigned int enable);
+
+#define POWER_USB_HOST_PHY_CTRL_EN             (1 << 0)
+#define POWER_USB_HOST_PHY_CTRL_DISABLE                (0 << 0)
 #endif
index 90d66d3aa3c7252c560f62a5ce640d2415c9bdfa..a71b3977d80f0b5d57633a10574a807cb9e2de9e 100644 (file)
@@ -25,6 +25,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/arch/ehci.h>
 #include <asm/arch/system.h>
+#include <asm/arch/power.h>
 #include "ehci.h"
 #include "ehci-core.h"
 
@@ -33,6 +34,8 @@ static void setup_usb_phy(struct exynos_usb_phy *usb)
 {
        set_usbhost_mode(USB20_PHY_CFG_HOST_LINK_EN);
 
+       set_usbhost_phy_ctrl(POWER_USB_HOST_PHY_CTRL_EN);
+
        clrbits_le32(&usb->usbphyctrl0,
                        HOST_CTRL0_FSEL_MASK |
                        HOST_CTRL0_COMMONON_N |
@@ -73,6 +76,8 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)
                        HOST_CTRL0_SIDDQ |
                        HOST_CTRL0_FORCESUSPEND |
                        HOST_CTRL0_FORCESLEEP);
+
+       set_usbhost_phy_ctrl(POWER_USB_HOST_PHY_CTRL_DISABLE);
 }
 
 /*