arm: odroid: enable/disable usb host phy for exynos4412
authorSuriyan Ramasami <suriyan.r@gmail.com>
Wed, 29 Oct 2014 16:22:42 +0000 (09:22 -0700)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 17 Nov 2014 10:33:21 +0000 (19:33 +0900)
Enable/disable the usb host phy on the odroid U/X2 boards which are based
on the Exynos4412 SOC.

Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
arch/arm/cpu/armv7/exynos/power.c
arch/arm/include/asm/arch-exynos/power.h

index e1ab3d6..1520d64 100644 (file)
@@ -53,10 +53,37 @@ void exynos5_set_usbhost_phy_ctrl(unsigned int enable)
        }
 }
 
+void exynos4412_set_usbhost_phy_ctrl(unsigned int enable)
+{
+       struct exynos4412_power *power =
+               (struct exynos4412_power *)samsung_get_base_power();
+
+       if (enable) {
+               /* Enabling USBHOST_PHY */
+               setbits_le32(&power->usbhost_phy_control,
+                            POWER_USB_HOST_PHY_CTRL_EN);
+               setbits_le32(&power->hsic1_phy_control,
+                            POWER_USB_HOST_PHY_CTRL_EN);
+               setbits_le32(&power->hsic2_phy_control,
+                            POWER_USB_HOST_PHY_CTRL_EN);
+       } else {
+               /* Disabling USBHOST_PHY */
+               clrbits_le32(&power->usbhost_phy_control,
+                            POWER_USB_HOST_PHY_CTRL_EN);
+               clrbits_le32(&power->hsic1_phy_control,
+                            POWER_USB_HOST_PHY_CTRL_EN);
+               clrbits_le32(&power->hsic2_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);
+       else if (cpu_is_exynos4())
+               if (proid_is_exynos4412())
+                       exynos4412_set_usbhost_phy_ctrl(enable);
 }
 
 static void exynos5_set_usbdrd_phy_ctrl(unsigned int enable)
index e8a98a5..3f97b31 100644 (file)
@@ -210,6 +210,13 @@ struct exynos4_power {
        unsigned int    gps_alive_option;
 };
 
+struct exynos4412_power {
+       unsigned char   res1[0x0704];
+       unsigned int    usbhost_phy_control;
+       unsigned int    hsic1_phy_control;
+       unsigned int    hsic2_phy_control;
+};
+
 struct exynos5_power {
        unsigned int    om_stat;
        unsigned char   res1[0x18];