• Home
  • Raw
  • Download

Lines Matching full:alarm

187 static int rtc_read_alarm_internal(struct rtc_device *rtc, struct rtc_wkalrm *alarm)  in rtc_read_alarm_internal()  argument
200 alarm->enabled = 0; in rtc_read_alarm_internal()
201 alarm->pending = 0; in rtc_read_alarm_internal()
202 alarm->time.tm_sec = -1; in rtc_read_alarm_internal()
203 alarm->time.tm_min = -1; in rtc_read_alarm_internal()
204 alarm->time.tm_hour = -1; in rtc_read_alarm_internal()
205 alarm->time.tm_mday = -1; in rtc_read_alarm_internal()
206 alarm->time.tm_mon = -1; in rtc_read_alarm_internal()
207 alarm->time.tm_year = -1; in rtc_read_alarm_internal()
208 alarm->time.tm_wday = -1; in rtc_read_alarm_internal()
209 alarm->time.tm_yday = -1; in rtc_read_alarm_internal()
210 alarm->time.tm_isdst = -1; in rtc_read_alarm_internal()
211 err = rtc->ops->read_alarm(rtc->dev.parent, alarm); in rtc_read_alarm_internal()
216 trace_rtc_read_alarm(rtc_tm_to_time64(&alarm->time), err); in rtc_read_alarm_internal()
220 int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) in __rtc_read_alarm() argument
230 * creating invalid alarm->time values, for reasons like: in __rtc_read_alarm()
238 * to set up as e.g. "alarm 15 minutes after each hour". in __rtc_read_alarm()
243 * RTC driver prevents "periodic alarm" modes. in __rtc_read_alarm()
246 * may have wrapped in the interval since we read the RTC alarm, in __rtc_read_alarm()
250 * Reading the alarm and timestamp in the reverse sequence in __rtc_read_alarm()
254 * then read the RTC alarm value, in __rtc_read_alarm()
279 /* get the RTC alarm values, which may be incomplete */ in __rtc_read_alarm()
280 err = rtc_read_alarm_internal(rtc, alarm); in __rtc_read_alarm()
285 if (rtc_valid_tm(&alarm->time) == 0) { in __rtc_read_alarm()
286 rtc_add_offset(rtc, &alarm->time); in __rtc_read_alarm()
301 /* Fill in the missing alarm fields using the timestamp; we in __rtc_read_alarm()
302 * know there's at least one since alarm->time is invalid. in __rtc_read_alarm()
304 if (alarm->time.tm_sec == -1) in __rtc_read_alarm()
305 alarm->time.tm_sec = now.tm_sec; in __rtc_read_alarm()
306 if (alarm->time.tm_min == -1) in __rtc_read_alarm()
307 alarm->time.tm_min = now.tm_min; in __rtc_read_alarm()
308 if (alarm->time.tm_hour == -1) in __rtc_read_alarm()
309 alarm->time.tm_hour = now.tm_hour; in __rtc_read_alarm()
312 if (alarm->time.tm_mday < 1 || alarm->time.tm_mday > 31) { in __rtc_read_alarm()
313 alarm->time.tm_mday = now.tm_mday; in __rtc_read_alarm()
316 if ((unsigned)alarm->time.tm_mon >= 12) { in __rtc_read_alarm()
317 alarm->time.tm_mon = now.tm_mon; in __rtc_read_alarm()
321 if (alarm->time.tm_year == -1) { in __rtc_read_alarm()
322 alarm->time.tm_year = now.tm_year; in __rtc_read_alarm()
327 /* Can't proceed if alarm is still invalid after replacing in __rtc_read_alarm()
330 err = rtc_valid_tm(&alarm->time); in __rtc_read_alarm()
336 t_alm = rtc_tm_to_time64(&alarm->time); in __rtc_read_alarm()
342 /* 24 hour rollover ... if it's now 10am Monday, an alarm that in __rtc_read_alarm()
348 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "day"); in __rtc_read_alarm()
350 rtc_time64_to_tm(t_alm, &alarm->time); in __rtc_read_alarm()
353 /* Month rollover ... if it's the 31th, an alarm on the 3rd will in __rtc_read_alarm()
354 * be next month. An alarm matching on the 30th, 29th, or 28th in __rtc_read_alarm()
356 * this type of alarm. in __rtc_read_alarm()
359 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "month"); in __rtc_read_alarm()
361 if (alarm->time.tm_mon < 11) in __rtc_read_alarm()
362 alarm->time.tm_mon++; in __rtc_read_alarm()
364 alarm->time.tm_mon = 0; in __rtc_read_alarm()
365 alarm->time.tm_year++; in __rtc_read_alarm()
367 days = rtc_month_days(alarm->time.tm_mon, in __rtc_read_alarm()
368 alarm->time.tm_year); in __rtc_read_alarm()
369 } while (days < alarm->time.tm_mday); in __rtc_read_alarm()
374 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "year"); in __rtc_read_alarm()
376 alarm->time.tm_year++; in __rtc_read_alarm()
377 } while (!is_leap_year(alarm->time.tm_year + 1900) in __rtc_read_alarm()
378 && rtc_valid_tm(&alarm->time) != 0); in __rtc_read_alarm()
382 dev_warn(&rtc->dev, "alarm rollover not handled\n"); in __rtc_read_alarm()
385 err = rtc_valid_tm(&alarm->time); in __rtc_read_alarm()
389 dev_warn(&rtc->dev, "invalid alarm value: %d-%d-%d %d:%d:%d\n", in __rtc_read_alarm()
390 alarm->time.tm_year + 1900, alarm->time.tm_mon + 1, in __rtc_read_alarm()
391 alarm->time.tm_mday, alarm->time.tm_hour, alarm->time.tm_min, in __rtc_read_alarm()
392 alarm->time.tm_sec); in __rtc_read_alarm()
398 int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) in rtc_read_alarm() argument
410 memset(alarm, 0, sizeof(struct rtc_wkalrm)); in rtc_read_alarm()
411 alarm->enabled = rtc->aie_timer.enabled; in rtc_read_alarm()
412 alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires); in rtc_read_alarm()
416 trace_rtc_read_alarm(rtc_tm_to_time64(&alarm->time), err); in rtc_read_alarm()
421 static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) in __rtc_set_alarm() argument
427 err = rtc_valid_tm(&alarm->time); in __rtc_set_alarm()
431 scheduled = rtc_tm_to_time64(&alarm->time); in __rtc_set_alarm()
441 * XXX - We just checked to make sure the alarm time is not in __rtc_set_alarm()
443 * the is alarm set for the next second and the second ticks in __rtc_set_alarm()
444 * over right here, before we set the alarm. in __rtc_set_alarm()
447 rtc_subtract_offset(rtc, &alarm->time); in __rtc_set_alarm()
454 err = rtc->ops->set_alarm(rtc->dev.parent, alarm); in __rtc_set_alarm()
456 trace_rtc_set_alarm(rtc_tm_to_time64(&alarm->time), err); in __rtc_set_alarm()
460 int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) in rtc_set_alarm() argument
469 err = rtc_valid_tm(&alarm->time); in rtc_set_alarm()
473 err = rtc_valid_range(rtc, &alarm->time); in rtc_set_alarm()
483 rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time); in rtc_set_alarm()
485 if (alarm->enabled) in rtc_set_alarm()
495 int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) in rtc_initialize_alarm() argument
500 err = rtc_valid_tm(&alarm->time); in rtc_initialize_alarm()
512 rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time); in rtc_initialize_alarm()
515 /* Alarm has to be enabled & in the future for us to enqueue it */ in rtc_initialize_alarm()
516 if (alarm->enabled && (rtc_tm_to_ktime(now) < in rtc_initialize_alarm()
812 * the next alarm event appropriately.
838 struct rtc_wkalrm alarm; in rtc_timer_enqueue() local
840 alarm.time = rtc_ktime_to_tm(timer->node.expires); in rtc_timer_enqueue()
841 alarm.enabled = 1; in rtc_timer_enqueue()
842 err = __rtc_set_alarm(rtc, &alarm); in rtc_timer_enqueue()
871 * the next alarm event appropriately.
884 struct rtc_wkalrm alarm; in rtc_timer_remove() local
891 alarm.time = rtc_ktime_to_tm(next->expires); in rtc_timer_remove()
892 alarm.enabled = 1; in rtc_timer_remove()
893 err = __rtc_set_alarm(rtc, &alarm); in rtc_timer_remove()
906 * Expires rtc timers. Reprograms next alarm event if needed.
948 /* Set next alarm */ in rtc_timer_do_work()
950 struct rtc_wkalrm alarm; in rtc_timer_do_work() local
954 alarm.time = rtc_ktime_to_tm(next->expires); in rtc_timer_do_work()
955 alarm.enabled = 1; in rtc_timer_do_work()
957 err = __rtc_set_alarm(rtc, &alarm); in rtc_timer_do_work()