rtc: Add support for limited alarm timer offsets
authorGuenter Roeck <linux@roeck-us.net>
Thu, 17 Aug 2023 22:55:31 +0000 (15:55 -0700)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 27 Aug 2023 21:50:22 +0000 (23:50 +0200)
Some alarm timers are based on time offsets, not on absolute times.
In some situations, the amount of time that can be scheduled in the
future is limited. This may result in a refusal to suspend the system,
causing substantial battery drain.

Some RTC alarm drivers remedy the situation by setting the alarm time
to the maximum supported time if a request for an out-of-range timeout
is made. This is not really desirable since it may result in unexpected
early wakeups.

To reduce the impact of this problem, let RTC drivers report the maximum
supported alarm timer offset. The code setting alarm timers can then
decide if it wants to reject setting alarm timers to a larger value, if it
wants to implement recurring alarms until the actually requested alarm
time is met, or if it wants to accept the limited alarm time.

Only introduce the necessary variable into struct rtc_device.
Code to set and use the variable will follow with subsequent patches.

Cc: Brian Norris <briannorris@chromium.org>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20230817225537.4053865-2-linux@roeck-us.net
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
include/linux/rtc.h

index 1fd9c6a21ebe85d8474867ba344c3451eb99bc99..4c0bcbeb1f00cf378fc2567a9431d808f0a5ab02 100644 (file)
@@ -146,6 +146,7 @@ struct rtc_device {
 
        time64_t range_min;
        timeu64_t range_max;
+       timeu64_t alarm_offset_max;
        time64_t start_secs;
        time64_t offset_secs;
        bool set_start_time;