This patch adds functions to enable/disable the power of USB
host controller for EXYNOS5.

Signed-off-by: Vivek Gautam <gautam.vi...@samsung.com>
Signed-off-by: Che-Liang Chiou <clch...@chromium.org>
Signed-off-by: Rajeshwari Shinde <rajeshwar...@samsung.com>
---
This patchset is based on:
USB: EXYNOS: Add ehci support.patch

 arch/arm/cpu/armv7/exynos/power.c        |   37 ++++++++++++++++++++++++++++++
 arch/arm/include/asm/arch-exynos/power.h |    4 +++
 drivers/usb/host/ehci-exynos.c           |    4 +++
 3 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/arch/arm/cpu/armv7/exynos/power.c 
b/arch/arm/cpu/armv7/exynos/power.c
index c765304..b2944b5 100644
--- a/arch/arm/cpu/armv7/exynos/power.c
+++ b/arch/arm/cpu/armv7/exynos/power.c
@@ -52,3 +52,40 @@ 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_ps_hold_setup(void)
+{
+       struct exynos5_power *power =
+               (struct exynos5_power *)samsung_get_base_power();
+
+       /* Set PS-Hold high */
+       setbits_le32(&power->ps_hold_control, POWER_PS_HOLD_CONTROL_DATA_HIGH);
+}
+
+void exynos5_enable_usb_phy(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 ps_hold_setup(void)
+{
+       if (cpu_is_exynos5())
+               exynos5_ps_hold_setup();
+}
+
+void power_enable_usb_phy(unsigned int enable)
+{
+       if (cpu_is_exynos5())
+               exynos5_enable_usb_phy(enable);
+}
diff --git a/arch/arm/include/asm/arch-exynos/power.h 
b/arch/arm/include/asm/arch-exynos/power.h
index 4236beb..fc44d86 100644
--- a/arch/arm/include/asm/arch-exynos/power.h
+++ b/arch/arm/include/asm/arch-exynos/power.h
@@ -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 power_enable_usb_phy(unsigned int enable);
+
+#define POWER_USB_HOST_PHY_CTRL_EN             (1 << 0)
+#define POWER_PS_HOLD_CONTROL_DATA_HIGH                (1 << 8)
 #endif
diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
index d918a2a..7c7489c 100644
--- a/drivers/usb/host/ehci-exynos.c
+++ b/drivers/usb/host/ehci-exynos.c
@@ -33,6 +33,8 @@ static void setup_usb_phy(struct exynos_usb_phy *usb)
 {
        enable_usbhost_mode(USB20_PHY_CFG_HOST_LINK_EN);
 
+       power_enable_usb_phy(1);
+
        clrbits_le32(&usb->usbphyctrl0,
                        HOST_CTRL0_FSEL_MASK |
                        HOST_CTRL0_COMMONON_N |
@@ -73,6 +75,8 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)
                        HOST_CTRL0_SIDDQ |
                        HOST_CTRL0_FORCESUSPEND |
                        HOST_CTRL0_FORCESLEEP);
+
+       power_enable_usb_phy(0);
 }
 
 /*
-- 
1.7.4.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to