On 12.09.2023 11:38:03, Martin Hundebøll wrote: > Add a flag to the suspend class function that leaves the chip in a > running state with rx interrupt enabled, so that m_can device driver can > configure and use the interrupt as a wakeup source. > > Signed-off-by: Martin Hundebøll <martin@xxxxxxxxxx> > --- > drivers/net/can/m_can/m_can.c | 13 +++++++++++-- > drivers/net/can/m_can/m_can.h | 2 +- > drivers/net/can/m_can/m_can_platform.c | 2 +- > 3 files changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c > index 16ecc11c7f62..21ac826170f9 100644 > --- a/drivers/net/can/m_can/m_can.c > +++ b/drivers/net/can/m_can/m_can.c > @@ -2113,7 +2113,7 @@ void m_can_class_unregister(struct m_can_classdev *cdev) > } > EXPORT_SYMBOL_GPL(m_can_class_unregister); > > -int m_can_class_suspend(struct device *dev) > +int m_can_class_suspend(struct device *dev, bool is_wake_source) Please change all users of m_can_class_suspend(). > { > struct m_can_classdev *cdev = dev_get_drvdata(dev); > struct net_device *ndev = cdev->net; > @@ -2121,7 +2121,16 @@ int m_can_class_suspend(struct device *dev) > if (netif_running(ndev)) { > netif_stop_queue(ndev); > netif_device_detach(ndev); > - m_can_stop(ndev); > + > + /* > + * leave the chip running with rx interrupt enabled if it used > + * as a wake-up source. > + */ networking block comments don't use an empty /* line, use /* Comment... > + if (is_wake_source) > + m_can_write(cdev, M_CAN_IE, IR_RF0N); > + else > + m_can_stop(ndev); > + > m_can_clk_stop(cdev); > } > > diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h > index 520e14277dff..542e8daad578 100644 > --- a/drivers/net/can/m_can/m_can.h > +++ b/drivers/net/can/m_can/m_can.h > @@ -105,6 +105,6 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev); > int m_can_init_ram(struct m_can_classdev *priv); > int m_can_check_mram_cfg(struct m_can_classdev *cdev, u32 mram_max_size); > > -int m_can_class_suspend(struct device *dev); > +int m_can_class_suspend(struct device *dev, bool is_wake_source); > int m_can_class_resume(struct device *dev); > #endif /* _CAN_M_H_ */ > diff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c > index cdb28d6a092c..bbf6a245a3e0 100644 > --- a/drivers/net/can/m_can/m_can_platform.c > +++ b/drivers/net/can/m_can/m_can_platform.c > @@ -169,7 +169,7 @@ static int m_can_plat_probe(struct platform_device *pdev) > > static __maybe_unused int m_can_suspend(struct device *dev) > { > - return m_can_class_suspend(dev); > + return m_can_class_suspend(dev, false); > } > > static __maybe_unused int m_can_resume(struct device *dev) > -- > 2.42.0 > > Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung Nürnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
Attachment:
signature.asc
Description: PGP signature