rtc: rzn1: Report maximum alarm limit to rtc core
authorGuenter Roeck <linux@roeck-us.net>
Thu, 17 Aug 2023 22:55:37 +0000 (15:55 -0700)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 27 Aug 2023 21:50:22 +0000 (23:50 +0200)
RZN1 only supports alarms up to one week in the future.
Report the limit to the RTC core and use the reported limit
to validate the requested alarm time when setting it.

Cc: Brian Norris <briannorris@chromium.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20230817225537.4053865-8-linux@roeck-us.net
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/rtc/rtc-rzn1.c

index 6f98969eedca3f54ca567b212924712360194de0..56ebbd4d04814715c61ae1144220446d1fa403d7 100644 (file)
@@ -227,7 +227,7 @@ static int rzn1_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
                return ret;
 
        /* We cannot set alarms more than one week ahead */
-       farest = rtc_tm_to_time64(&tm_now) + (7 * 86400);
+       farest = rtc_tm_to_time64(&tm_now) + rtc->rtcdev->alarm_offset_max;
        alarm = rtc_tm_to_time64(tm);
        if (time_after(alarm, farest))
                return -ERANGE;
@@ -351,6 +351,7 @@ static int rzn1_rtc_probe(struct platform_device *pdev)
 
        rtc->rtcdev->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rtc->rtcdev->range_max = RTC_TIMESTAMP_END_2099;
+       rtc->rtcdev->alarm_offset_max = 7 * 86400;
        rtc->rtcdev->ops = &rzn1_rtc_ops;
        set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rtc->rtcdev->features);
        clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->rtcdev->features);