|
@@ -85,15 +85,10 @@ static int exynos_usb_parse_dt(const void *blob, struct exynos_ehci *exynos)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-/* Setup the EHCI host controller. */
|
|
|
-static void setup_usb_phy(struct exynos_usb_phy *usb)
|
|
|
+static void exynos5_setup_usb_phy(struct exynos_usb_phy *usb)
|
|
|
{
|
|
|
u32 hsic_ctrl;
|
|
|
|
|
|
- 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 |
|
|
@@ -150,8 +145,34 @@ static void setup_usb_phy(struct exynos_usb_phy *usb)
|
|
|
EHCICTRL_ENAINCR16);
|
|
|
}
|
|
|
|
|
|
-/* Reset the EHCI host controller. */
|
|
|
-static void reset_usb_phy(struct exynos_usb_phy *usb)
|
|
|
+static void exynos4412_setup_usb_phy(struct exynos4412_usb_phy *usb)
|
|
|
+{
|
|
|
+ writel(CLK_24MHZ, &usb->usbphyclk);
|
|
|
+
|
|
|
+ clrbits_le32(&usb->usbphyctrl, (PHYPWR_NORMAL_MASK_HSIC0 |
|
|
|
+ PHYPWR_NORMAL_MASK_HSIC1 | PHYPWR_NORMAL_MASK_PHY1 |
|
|
|
+ PHYPWR_NORMAL_MASK_PHY0));
|
|
|
+
|
|
|
+ setbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | RSTCON_SWRST));
|
|
|
+ udelay(10);
|
|
|
+ clrbits_le32(&usb->usbphyrstcon, (RSTCON_HOSTPHY_SWRST | RSTCON_SWRST));
|
|
|
+}
|
|
|
+
|
|
|
+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);
|
|
|
+
|
|
|
+ if (cpu_is_exynos5())
|
|
|
+ exynos5_setup_usb_phy(usb);
|
|
|
+ else if (cpu_is_exynos4())
|
|
|
+ if (proid_is_exynos4412())
|
|
|
+ exynos4412_setup_usb_phy((struct exynos4412_usb_phy *)
|
|
|
+ usb);
|
|
|
+}
|
|
|
+
|
|
|
+static void exynos5_reset_usb_phy(struct exynos_usb_phy *usb)
|
|
|
{
|
|
|
u32 hsic_ctrl;
|
|
|
|
|
@@ -171,6 +192,24 @@ static void reset_usb_phy(struct exynos_usb_phy *usb)
|
|
|
|
|
|
setbits_le32(&usb->hsicphyctrl1, hsic_ctrl);
|
|
|
setbits_le32(&usb->hsicphyctrl2, hsic_ctrl);
|
|
|
+}
|
|
|
+
|
|
|
+static void exynos4412_reset_usb_phy(struct exynos4412_usb_phy *usb)
|
|
|
+{
|
|
|
+ setbits_le32(&usb->usbphyctrl, (PHYPWR_NORMAL_MASK_HSIC0 |
|
|
|
+ PHYPWR_NORMAL_MASK_HSIC1 | PHYPWR_NORMAL_MASK_PHY1 |
|
|
|
+ PHYPWR_NORMAL_MASK_PHY0));
|
|
|
+}
|
|
|
+
|
|
|
+/* Reset the EHCI host controller. */
|
|
|
+static void reset_usb_phy(struct exynos_usb_phy *usb)
|
|
|
+{
|
|
|
+ if (cpu_is_exynos5())
|
|
|
+ exynos5_reset_usb_phy(usb);
|
|
|
+ else if (cpu_is_exynos4())
|
|
|
+ if (proid_is_exynos4412())
|
|
|
+ exynos4412_reset_usb_phy((struct exynos4412_usb_phy *)
|
|
|
+ usb);
|
|
|
|
|
|
set_usbhost_phy_ctrl(POWER_USB_HOST_PHY_CTRL_DISABLE);
|
|
|
}
|