]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rtc: mv: add suspend/resume support for wakeup
authorXue Lei <Xue.Lei@windriver.com>
Thu, 11 Jun 2026 02:33:50 +0000 (10:33 +0800)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 22 Jun 2026 22:13:36 +0000 (00:13 +0200)
Add PM suspend/resume callbacks to enable/disable IRQ wake for the
RTC alarm interrupt. This allows the RTC alarm to wake the system
from STR (e.g. via rtcwake -m mem -s N).

Without this, the RTC IRQ is masked during suspend by the MPIC's
IRQCHIP_MASK_ON_SUSPEND behavior, preventing alarm-based wakeup.

Signed-off-by: Xue Lei <Xue.Lei@windriver.com>
Link: https://patch.msgid.link/20260611023350.1370881-1-Xue.Lei@windriver.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-mv.c

index c27ad626d09fce7c4c3290dc71d4b60a613be972..f88976fd6d5da45ef33ceb8e5a9ad84e37cab743 100644 (file)
@@ -301,6 +301,28 @@ static const struct of_device_id rtc_mv_of_match_table[] = {
 MODULE_DEVICE_TABLE(of, rtc_mv_of_match_table);
 #endif
 
+#ifdef CONFIG_PM_SLEEP
+static int mv_rtc_suspend(struct device *dev)
+{
+       struct rtc_plat_data *pdata = dev_get_drvdata(dev);
+
+       if (device_may_wakeup(dev) && pdata->irq >= 0)
+               enable_irq_wake(pdata->irq);
+       return 0;
+}
+
+static int mv_rtc_resume(struct device *dev)
+{
+       struct rtc_plat_data *pdata = dev_get_drvdata(dev);
+
+       if (device_may_wakeup(dev) && pdata->irq >= 0)
+               disable_irq_wake(pdata->irq);
+       return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(mv_rtc_pm_ops, mv_rtc_suspend, mv_rtc_resume);
+
 /*
  * mv_rtc_remove() lives in .exit.text. For drivers registered via
  * module_platform_driver_probe() this is ok because they cannot get unbound at
@@ -312,6 +334,7 @@ static struct platform_driver mv_rtc_driver __refdata = {
        .driver         = {
                .name   = "rtc-mv",
                .of_match_table = of_match_ptr(rtc_mv_of_match_table),
+               .pm     = &mv_rtc_pm_ops,
        },
 };