On Thu, Mar 06, 2025 at 02:59:21PM +0800, haibo.chen@xxxxxxx wrote: > From: Haibo Chen <haibo.chen@xxxxxxx> > > During system PM, if no wakeup requirement, disable transceiver to > save power. > > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx> Reviewed-by: Frank Li <Frank.Li@xxxxxxx> > --- > Changes for V2: > - add return check for flexcan_transceiver_disable > - disable transceiver if flexcan_chip_start() failed > --- > drivers/net/can/flexcan/flexcan-core.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/can/flexcan/flexcan-core.c b/drivers/net/can/flexcan/flexcan-core.c > index 8415ef71f1b1..6c59c2cfcf05 100644 > --- a/drivers/net/can/flexcan/flexcan-core.c > +++ b/drivers/net/can/flexcan/flexcan-core.c > @@ -2292,6 +2292,9 @@ static int __maybe_unused flexcan_suspend(struct device *device) > return err; > > flexcan_chip_interrupts_disable(dev); > + err = flexcan_transceiver_disable(priv); > + if (err) > + return err; > > err = pinctrl_pm_select_sleep_state(device); > if (err) > @@ -2324,10 +2327,16 @@ 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); > } > } > -- > 2.34.1 >