diff options
author | Nimrod Andy <B38611@freescale.com> | 2014-05-27 03:51:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-05-30 20:03:21 -0400 |
commit | 5bbde4d2ec8061a9cdad3f7a08d61c4d78e57e0e (patch) | |
tree | 369541290f7e4a2b313d554a8284bc4d7df4f012 | |
parent | ce25b68b74593bbb676ec087b3a0c69f94df7de0 (diff) |
net: fec: use pinctrl PM helpers
when system suspend, need to set pins to low power state to
save IO power consumption, there are three states of pinctrl:
"default", "idle" and "sleep". Currently enet supports default
and sleep state.
Signed-off-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index cb5c987bee39..4d989b2df420 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -1816,6 +1816,7 @@ fec_enet_open(struct net_device *ndev) | |||
1816 | struct fec_enet_private *fep = netdev_priv(ndev); | 1816 | struct fec_enet_private *fep = netdev_priv(ndev); |
1817 | int ret; | 1817 | int ret; |
1818 | 1818 | ||
1819 | pinctrl_pm_select_default_state(&fep->pdev->dev); | ||
1819 | ret = fec_enet_clk_enable(ndev, true); | 1820 | ret = fec_enet_clk_enable(ndev, true); |
1820 | if (ret) | 1821 | if (ret) |
1821 | return ret; | 1822 | return ret; |
@@ -1859,6 +1860,7 @@ fec_enet_close(struct net_device *ndev) | |||
1859 | } | 1860 | } |
1860 | 1861 | ||
1861 | fec_enet_clk_enable(ndev, false); | 1862 | fec_enet_clk_enable(ndev, false); |
1863 | pinctrl_pm_select_sleep_state(&fep->pdev->dev); | ||
1862 | fec_enet_free_buffers(ndev); | 1864 | fec_enet_free_buffers(ndev); |
1863 | 1865 | ||
1864 | return 0; | 1866 | return 0; |
@@ -2162,6 +2164,9 @@ fec_probe(struct platform_device *pdev) | |||
2162 | fep->pause_flag |= FEC_PAUSE_FLAG_AUTONEG; | 2164 | fep->pause_flag |= FEC_PAUSE_FLAG_AUTONEG; |
2163 | #endif | 2165 | #endif |
2164 | 2166 | ||
2167 | /* Select default pin state */ | ||
2168 | pinctrl_pm_select_default_state(&pdev->dev); | ||
2169 | |||
2165 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 2170 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
2166 | fep->hwp = devm_ioremap_resource(&pdev->dev, r); | 2171 | fep->hwp = devm_ioremap_resource(&pdev->dev, r); |
2167 | if (IS_ERR(fep->hwp)) { | 2172 | if (IS_ERR(fep->hwp)) { |
@@ -2258,6 +2263,7 @@ fec_probe(struct platform_device *pdev) | |||
2258 | /* Carrier starts down, phylib will bring it up */ | 2263 | /* Carrier starts down, phylib will bring it up */ |
2259 | netif_carrier_off(ndev); | 2264 | netif_carrier_off(ndev); |
2260 | fec_enet_clk_enable(ndev, false); | 2265 | fec_enet_clk_enable(ndev, false); |
2266 | pinctrl_pm_select_sleep_state(&pdev->dev); | ||
2261 | 2267 | ||
2262 | ret = register_netdev(ndev); | 2268 | ret = register_netdev(ndev); |
2263 | if (ret) | 2269 | if (ret) |
@@ -2317,6 +2323,7 @@ fec_suspend(struct device *dev) | |||
2317 | netif_device_detach(ndev); | 2323 | netif_device_detach(ndev); |
2318 | } | 2324 | } |
2319 | fec_enet_clk_enable(ndev, false); | 2325 | fec_enet_clk_enable(ndev, false); |
2326 | pinctrl_pm_select_sleep_state(&fep->pdev->dev); | ||
2320 | 2327 | ||
2321 | if (fep->reg_phy) | 2328 | if (fep->reg_phy) |
2322 | regulator_disable(fep->reg_phy); | 2329 | regulator_disable(fep->reg_phy); |
@@ -2337,6 +2344,7 @@ fec_resume(struct device *dev) | |||
2337 | return ret; | 2344 | return ret; |
2338 | } | 2345 | } |
2339 | 2346 | ||
2347 | pinctrl_pm_select_default_state(&fep->pdev->dev); | ||
2340 | ret = fec_enet_clk_enable(ndev, true); | 2348 | ret = fec_enet_clk_enable(ndev, true); |
2341 | if (ret) | 2349 | if (ret) |
2342 | goto failed_clk; | 2350 | goto failed_clk; |