diff options
| -rw-r--r-- | kernel/time/alarmtimer.c | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/kernel/time/alarmtimer.c b/kernel/time/alarmtimer.c index 8d9f13d847f0..4657cb8e8b1f 100644 --- a/kernel/time/alarmtimer.c +++ b/kernel/time/alarmtimer.c @@ -290,6 +290,17 @@ static int alarmtimer_suspend(struct device *dev)  	rtc_timer_cancel(rtc, &rtctimer);  	rtc_read_time(rtc, &tm);  	now = rtc_tm_to_ktime(tm); + +	/* +	 * If the RTC alarm timer only supports a limited time offset, set the +	 * alarm time to the maximum supported value. +	 * The system may wake up earlier (possibly much earlier) than expected +	 * when the alarmtimer runs. This is the best the kernel can do if +	 * the alarmtimer exceeds the time that the rtc device can be programmed +	 * for. +	 */ +	min = rtc_bound_alarmtime(rtc, min); +  	now = ktime_add(now, min);  	/* Set alarm, if in the past reject suspend briefly to handle */ | 
