phy: usbphyc: move vdda1v1 and vdda1v8 in phy_init
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 29 Mar 2019 14:42:12 +0000 (15:42 +0100)
committerMarek Vasut <marex@denx.de>
Sun, 21 Apr 2019 08:26:51 +0000 (10:26 +0200)
vdda1v1 and vdda1v8 are used by the PLL.
Both need to be enabled before starting the PLL.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
drivers/phy/phy-stm32-usbphyc.c

index 617c5a0ce00df1f3f6b4ac8bca140b0af7534af1..54363cd165f2b3194990a6a49736de3b6ba80435 100644 (file)
@@ -60,7 +60,8 @@ struct stm32_usbphyc {
        } phys[MAX_PHYS];
 };
 
-void stm32_usbphyc_get_pll_params(u32 clk_rate, struct pll_params *pll_params)
+static void stm32_usbphyc_get_pll_params(u32 clk_rate,
+                                        struct pll_params *pll_params)
 {
        unsigned long long fvco, ndiv, frac;
 
@@ -153,6 +154,18 @@ static int stm32_usbphyc_phy_init(struct phy *phy)
        if (pllen && stm32_usbphyc_is_init(usbphyc))
                goto initialized;
 
+       if (usbphyc->vdda1v1) {
+               ret = regulator_set_enable(usbphyc->vdda1v1, true);
+               if (ret)
+                       return ret;
+       }
+
+       if (usbphyc->vdda1v8) {
+               ret = regulator_set_enable(usbphyc->vdda1v8, true);
+               if (ret)
+                       return ret;
+       }
+
        if (pllen) {
                clrbits_le32(usbphyc->base + STM32_USBPHYC_PLL, PLLEN);
                udelay(PLL_PWR_DOWN_TIME_US);
@@ -183,6 +196,7 @@ static int stm32_usbphyc_phy_exit(struct phy *phy)
 {
        struct stm32_usbphyc *usbphyc = dev_get_priv(phy->dev);
        struct stm32_usbphyc_phy *usbphyc_phy = usbphyc->phys + phy->id;
+       int ret;
 
        pr_debug("%s phy ID = %lu\n", __func__, phy->id);
        usbphyc_phy->init = false;
@@ -202,30 +216,30 @@ static int stm32_usbphyc_phy_exit(struct phy *phy)
        if (readl(usbphyc->base + STM32_USBPHYC_PLL) & PLLEN)
                return -EIO;
 
-       return 0;
-}
-
-static int stm32_usbphyc_phy_power_on(struct phy *phy)
-{
-       struct stm32_usbphyc *usbphyc = dev_get_priv(phy->dev);
-       struct stm32_usbphyc_phy *usbphyc_phy = usbphyc->phys + phy->id;
-       int ret;
-
-       pr_debug("%s phy ID = %lu\n", __func__, phy->id);
        if (usbphyc->vdda1v1) {
-               ret = regulator_set_enable(usbphyc->vdda1v1, true);
+               ret = regulator_set_enable(usbphyc->vdda1v1, false);
                if (ret)
                        return ret;
        }
 
        if (usbphyc->vdda1v8) {
-               ret = regulator_set_enable(usbphyc->vdda1v8, true);
+               ret = regulator_set_enable(usbphyc->vdda1v8, false);
                if (ret)
                        return ret;
        }
 
-       if (usbphyc->vdd) {
-               ret = regulator_set_enable(usbphyc->vdd, true);
+       return 0;
+}
+
+static int stm32_usbphyc_phy_power_on(struct phy *phy)
+{
+       struct stm32_usbphyc *usbphyc = dev_get_priv(phy->dev);
+       struct stm32_usbphyc_phy *usbphyc_phy = usbphyc->phys + phy->id;
+       int ret;
+
+       pr_debug("%s phy ID = %lu\n", __func__, phy->id);
+       if (usbphyc_phy->vdd) {
+               ret = regulator_set_enable(usbphyc_phy->vdd, true);
                if (ret)
                        return ret;
        }
@@ -247,20 +261,8 @@ static int stm32_usbphyc_phy_power_off(struct phy *phy)
        if (stm32_usbphyc_is_powered(usbphyc))
                return 0;
 
-       if (usbphyc->vdda1v1) {
-               ret = regulator_set_enable(usbphyc->vdda1v1, false);
-               if (ret)
-                       return ret;
-       }
-
-       if (usbphyc->vdda1v8) {
-               ret = regulator_set_enable(usbphyc->vdda1v8, false);
-               if (ret)
-                       return ret;
-       }
-
-       if (usbphyc->vdd) {
-               ret = regulator_set_enable(usbphyc->vdd, false);
+       if (usbphyc_phy->vdd) {
+               ret = regulator_set_enable(usbphyc_phy->vdd, false);
                if (ret)
                        return ret;
        }