diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fec_main.c')
-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 454c3a5d43bb..9020604a3d68 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -4062,6 +4062,8 @@ static int __maybe_unused fec_suspend(struct device *dev) if (fep->wol_flag & FEC_WOL_FLAG_ENABLE) fep->wol_flag |= FEC_WOL_FLAG_SLEEP_ON; phy_stop(ndev->phydev); + if (fep->reg_phy) + disable_irq(ndev->phydev->irq); napi_disable(&fep->napi); netif_tx_lock_bh(ndev); netif_device_detach(ndev); @@ -4097,6 +4099,8 @@ static int __maybe_unused fec_suspend(struct device *dev) if (fep->clk_enet_out || fep->reg_phy) fep->link = 0; + pm_runtime_force_suspend(ndev->dev.parent); + return 0; } @@ -4107,6 +4111,8 @@ static int __maybe_unused fec_resume(struct device *dev) int ret; int val; + pm_runtime_force_resume(ndev->dev.parent); + if (fep->reg_phy && !(fep->wol_flag & FEC_WOL_FLAG_ENABLE)) { ret = regulator_enable(fep->reg_phy); if (ret) @@ -4133,6 +4139,8 @@ static int __maybe_unused fec_resume(struct device *dev) fep->wol_flag &= ~FEC_WOL_FLAG_SLEEP_ON; } else { pinctrl_pm_select_default_state(&fep->pdev->dev); + if (fep->reg_phy) + enable_irq(ndev->phydev->irq); } fec_restart(ndev); netif_tx_lock_bh(ndev); |