浏览代码

net: fec: enable regulator for fec phy

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>
Shawn Guo 13 年之前
父节点
当前提交
5fa9c0fe3e
共有 1 个文件被更改,包括 13 次插入0 次删除
  1. 13 0
      drivers/net/ethernet/freescale/fec.c

+ 13 - 0
drivers/net/ethernet/freescale/fec.c

@@ -49,6 +49,7 @@
 #include <linux/of_gpio.h>
 #include <linux/of_gpio.h>
 #include <linux/of_net.h>
 #include <linux/of_net.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/pinctrl/consumer.h>
+#include <linux/regulator/consumer.h>
 
 
 #include <asm/cacheflush.h>
 #include <asm/cacheflush.h>
 
 
@@ -1546,6 +1547,7 @@ fec_probe(struct platform_device *pdev)
 	const struct of_device_id *of_id;
 	const struct of_device_id *of_id;
 	static int dev_id;
 	static int dev_id;
 	struct pinctrl *pinctrl;
 	struct pinctrl *pinctrl;
+	struct regulator *reg_phy;
 
 
 	of_id = of_match_device(fec_dt_ids, &pdev->dev);
 	of_id = of_match_device(fec_dt_ids, &pdev->dev);
 	if (of_id)
 	if (of_id)
@@ -1632,6 +1634,16 @@ fec_probe(struct platform_device *pdev)
 	clk_prepare_enable(fep->clk_ahb);
 	clk_prepare_enable(fep->clk_ahb);
 	clk_prepare_enable(fep->clk_ipg);
 	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);
 	fec_reset_phy(pdev);
 
 
 	ret = fec_enet_init(ndev);
 	ret = fec_enet_init(ndev);
@@ -1655,6 +1667,7 @@ failed_register:
 	fec_enet_mii_remove(fep);
 	fec_enet_mii_remove(fep);
 failed_mii_init:
 failed_mii_init:
 failed_init:
 failed_init:
+failed_regulator:
 	clk_disable_unprepare(fep->clk_ahb);
 	clk_disable_unprepare(fep->clk_ahb);
 	clk_disable_unprepare(fep->clk_ipg);
 	clk_disable_unprepare(fep->clk_ipg);
 failed_pin:
 failed_pin: