net: fec: enable regulator for fec phy
authorShawn Guo <shawn.guo@linaro.org>
Wed, 27 Jun 2012 03:45:21 +0000 (03:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Jun 2012 04:22:05 +0000 (21:22 -0700)
If bootloader or platform initialization code does not enable the
power supply to fec phy, we need to do it in fec driver before calling
fec_reset_phy to have the phy powered on.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fec.c

index e868a377c898e128d2904d474831836f00f5e90e..4dce9e3ac83af02dd682ce8921cecf49dfecac73 100644 (file)
@@ -49,6 +49,7 @@
 #include <linux/of_gpio.h>
 #include <linux/of_net.h>
 #include <linux/pinctrl/consumer.h>
+#include <linux/regulator/consumer.h>
 
 #include <asm/cacheflush.h>
 
@@ -1546,6 +1547,7 @@ fec_probe(struct platform_device *pdev)
        const struct of_device_id *of_id;
        static int dev_id;
        struct pinctrl *pinctrl;
+       struct regulator *reg_phy;
 
        of_id = of_match_device(fec_dt_ids, &pdev->dev);
        if (of_id)
@@ -1632,6 +1634,16 @@ fec_probe(struct platform_device *pdev)
        clk_prepare_enable(fep->clk_ahb);
        clk_prepare_enable(fep->clk_ipg);
 
+       reg_phy = devm_regulator_get(&pdev->dev, "phy");
+       if (!IS_ERR(reg_phy)) {
+               ret = regulator_enable(reg_phy);
+               if (ret) {
+                       dev_err(&pdev->dev,
+                               "Failed to enable phy regulator: %d\n", ret);
+                       goto failed_regulator;
+               }
+       }
+
        fec_reset_phy(pdev);
 
        ret = fec_enet_init(ndev);
@@ -1655,6 +1667,7 @@ failed_register:
        fec_enet_mii_remove(fep);
 failed_mii_init:
 failed_init:
+failed_regulator:
        clk_disable_unprepare(fep->clk_ahb);
        clk_disable_unprepare(fep->clk_ipg);
 failed_pin: