net: dm: fec: Support the phy-supply binding
authorMartin Fuzzey <martin.fuzzey@flowbird.group>
Thu, 4 Oct 2018 17:59:20 +0000 (19:59 +0200)
committerJoe Hershberger <joe.hershberger@ni.com>
Wed, 24 Oct 2018 19:45:37 +0000 (14:45 -0500)
Configure the phy regulator if defined by the "phy-supply" DT phandle.

Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/fec_mxc.c
drivers/net/fec_mxc.h

index da970ef864bc1314a467dff294de173e319fdef1..d3a926dc73731269e14915b8477527cad5b10111 100644 (file)
@@ -15,6 +15,7 @@
 #include <miiphy.h>
 #include <net.h>
 #include <netdev.h>
+#include <power/regulator.h>
 
 #include <asm/io.h>
 #include <linux/errno.h>
@@ -1272,6 +1273,16 @@ static int fecmxc_probe(struct udevice *dev)
        if (ret)
                return ret;
 
+#ifdef CONFIG_DM_REGULATOR
+       if (priv->phy_supply) {
+               ret = regulator_autoset(priv->phy_supply);
+               if (ret) {
+                       printf("%s: Error enabling phy supply\n", dev->name);
+                       return ret;
+               }
+       }
+#endif
+
 #ifdef CONFIG_DM_GPIO
        fec_gpio_reset(priv);
 #endif
@@ -1327,6 +1338,11 @@ static int fecmxc_remove(struct udevice *dev)
        mdio_unregister(priv->bus);
        mdio_free(priv->bus);
 
+#ifdef CONFIG_DM_REGULATOR
+       if (priv->phy_supply)
+               regulator_set_enable(priv->phy_supply, false);
+#endif
+
        return 0;
 }
 
@@ -1350,6 +1366,10 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
                return -EINVAL;
        }
 
+#ifdef CONFIG_DM_REGULATOR
+       device_get_supply_regulator(dev, "phy-supply", &priv->phy_supply);
+#endif
+
 #ifdef CONFIG_DM_GPIO
        ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
                                   &priv->phy_reset_gpio, GPIOD_IS_OUT);
index fd894432054d9b815f633f82586e57558fe48d3f..848cd7c22779b8973997386a1a8e2f8f65bc1bb2 100644 (file)
@@ -250,6 +250,9 @@ struct fec_priv {
        int phy_id;
        int (*mii_postcall)(int);
 #endif
+#ifdef CONFIG_DM_REGULATOR
+       struct udevice *phy_supply;
+#endif
 #ifdef CONFIG_DM_GPIO
        struct gpio_desc phy_reset_gpio;
        uint32_t reset_delay;