Merge patch series "can: flexcan: only change CAN state when link up in system PM"

In this series Haibo Chen fixes several shortcomings of the suspend
and resume functions of the flexcan driver.

Link: https://patch.msgid.link/20250314110145.899179-1-haibo.chen@nxp.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
Marc Kleine-Budde
2025-03-14 13:26:04 +01:00

View File

@@ -2260,14 +2260,19 @@ static int __maybe_unused flexcan_suspend(struct device *device)
flexcan_chip_interrupts_disable(dev);
err = flexcan_transceiver_disable(priv);
if (err)
return err;
err = pinctrl_pm_select_sleep_state(device);
if (err)
return err;
}
netif_stop_queue(dev);
netif_device_detach(dev);
priv->can.state = CAN_STATE_SLEEPING;
}
priv->can.state = CAN_STATE_SLEEPING;
return 0;
}
@@ -2278,7 +2283,6 @@ static int __maybe_unused flexcan_resume(struct device *device)
struct flexcan_priv *priv = netdev_priv(dev);
int err;
priv->can.state = CAN_STATE_ERROR_ACTIVE;
if (netif_running(dev)) {
netif_device_attach(dev);
netif_start_queue(dev);
@@ -2292,12 +2296,20 @@ static int __maybe_unused flexcan_resume(struct device *device)
if (err)
return err;
err = flexcan_chip_start(dev);
err = flexcan_transceiver_enable(priv);
if (err)
return err;
err = flexcan_chip_start(dev);
if (err) {
flexcan_transceiver_disable(priv);
return err;
}
flexcan_chip_interrupts_enable(dev);
}
priv->can.state = CAN_STATE_ERROR_ACTIVE;
}
return 0;