Disable clocks during CAN in stop mode. Signed-off-by: Joakim Zhang <qiangqing.zhang@xxxxxxx> ------ ChangeLog: V1->V2: * moving the pm_runtime_force_suspend() call for both cases "device_may_wakeup()" and "!device_may_wakeup()" into the flexcan_noirq_suspend() handler --- drivers/net/can/flexcan.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 6c1ccf9f6c08..63b2f47635cf 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -1718,10 +1718,6 @@ static int __maybe_unused flexcan_suspend(struct device *device) if (err) return err; - err = pm_runtime_force_suspend(device); - if (err) - return err; - err = pinctrl_pm_select_sleep_state(device); if (err) return err; @@ -1751,10 +1747,6 @@ static int __maybe_unused flexcan_resume(struct device *device) if (err) return err; - err = pm_runtime_force_resume(device); - if (err) - return err; - err = flexcan_chip_start(dev); if (err) return err; @@ -1786,9 +1778,16 @@ static int __maybe_unused flexcan_noirq_suspend(struct device *device) { struct net_device *dev = dev_get_drvdata(device); struct flexcan_priv *priv = netdev_priv(dev); + int err; - if (netif_running(dev) && device_may_wakeup(device)) - flexcan_enable_wakeup_irq(priv, true); + if (netif_running(dev)) { + if (device_may_wakeup(device)) + flexcan_enable_wakeup_irq(priv, true); + + err = pm_runtime_force_suspend(device); + if (err) + return err; + } return 0; } @@ -1799,11 +1798,18 @@ static int __maybe_unused flexcan_noirq_resume(struct device *device) struct flexcan_priv *priv = netdev_priv(dev); int err; - if (netif_running(dev) && device_may_wakeup(device)) { - flexcan_enable_wakeup_irq(priv, false); - err = flexcan_exit_stop_mode(priv); + if (netif_running(dev)) { + err = pm_runtime_force_resume(device); if (err) return err; + + if (device_may_wakeup(device)) { + flexcan_enable_wakeup_irq(priv, false); + + err = flexcan_exit_stop_mode(priv); + if (err) + return err; + } } return 0; -- 2.17.1