rtc: rzn1: Disable alarm interrupt before reprogramming alarm registers
authorLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Fri, 21 Aug 2026 21:10:21 +0000 (22:10 +0100)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 23 Aug 2026 19:23:56 +0000 (21:23 +0200)
rzn1_rtc_set_alarm() updates RZN1_RTC_ALM, RZN1_RTC_ALH and
RZN1_RTC_ALW using separate MMIO writes without first disabling the
alarm interrupt. If a previous alarm is still enabled, the interrupt
can fire while the alarm registers contain a mixture of old and newly
written values.

Fix this by disabling the alarm interrupt before reprogramming ALM, ALH
and ALW with a call to rzn1_rtc_alarm_irq_enable().

Fixes: b5ad1bf00d2c4 ("rtc: rzn1: Add alarm support")
Cc: stable@vger.kernel.org
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://patch.msgid.link/20260821211032.13554-7-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-rzn1.c

index f326865..42e57bf 100644 (file)
@@ -281,6 +281,11 @@ static int rzn1_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
        if (alarm > farest)
                return -ERANGE;
 
+       /* Disable alarm interrupts before reprogramming the alarm. */
+       ret = rzn1_rtc_alarm_irq_enable(dev, 0);
+       if (ret)
+               return ret;
+
        writel(bin2bcd(tm->tm_min), rtc->base + RZN1_RTC_ALM);
        writel(bin2bcd(tm->tm_hour), rtc->base + RZN1_RTC_ALH);
        writel(BIT(tm->tm_wday), rtc->base + RZN1_RTC_ALW);