14 #include <linux/rtc.h>
15 #include <linux/sched.h>
16 #include <linux/module.h>
28 else if (!rtc->
ops->read_time)
32 err = rtc->
ops->read_time(rtc->
dev.parent, tm);
45 err = __rtc_read_time(rtc, tm);
65 else if (rtc->
ops->set_time)
66 err = rtc->
ops->set_time(rtc->
dev.parent, tm);
67 else if (rtc->
ops->set_mmss) {
71 err = rtc->
ops->set_mmss(rtc->
dev.parent, secs);
92 else if (rtc->
ops->set_mmss)
93 err = rtc->
ops->set_mmss(rtc->
dev.parent, secs);
94 else if (rtc->
ops->read_time && rtc->
ops->set_time) {
97 err = rtc->
ops->read_time(rtc->
dev.parent, &old);
108 (
new.tm_hour == 23 &&
new.tm_min == 59)))
109 err = rtc->
ops->set_time(rtc->
dev.parent,
134 else if (!rtc->
ops->read_alarm)
138 err = rtc->
ops->read_alarm(rtc->
dev.parent, alarm);
150 unsigned long t_now, t_alm;
205 err = rtc_read_alarm_internal(rtc, alarm);
227 if (alarm->
time.tm_sec == -1)
229 if (alarm->
time.tm_min == -1)
231 if (alarm->
time.tm_hour == -1)
235 if (alarm->
time.tm_mday < 1 || alarm->
time.tm_mday > 31) {
239 if ((
unsigned)alarm->
time.tm_mon >= 12) {
244 if (alarm->
time.tm_year == -1) {
264 dev_dbg(&rtc->
dev,
"alarm rollover: %s\n",
"day");
265 t_alm += 24 * 60 * 60;
275 dev_dbg(&rtc->
dev,
"alarm rollover: %s\n",
"month");
277 if (alarm->
time.tm_mon < 11)
278 alarm->
time.tm_mon++;
280 alarm->
time.tm_mon = 0;
281 alarm->
time.tm_year++;
284 alarm->
time.tm_year);
285 }
while (days < alarm->
time.tm_mday);
290 dev_dbg(&rtc->
dev,
"alarm rollover: %s\n",
"year");
292 alarm->
time.tm_year++;
297 dev_warn(&rtc->
dev,
"alarm rollover not handled\n");
313 else if (!rtc->
ops->read_alarm)
338 err = __rtc_read_time(rtc, &tm);
340 if (scheduled <= now)
351 else if (!rtc->
ops->set_alarm)
354 err = rtc->
ops->set_alarm(rtc->
dev.parent, alarm);
376 err = rtc_timer_enqueue(rtc, &rtc->
aie_timer);
426 err = rtc_timer_enqueue(rtc, &rtc->
aie_timer);
435 else if (!rtc->
ops->alarm_irq_enable)
438 err = rtc->
ops->alarm_irq_enable(rtc->
dev.parent, enabled);
451 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
452 if (enabled == 0 && rtc->uie_irq_active) {
470 __rtc_read_time(rtc, &tm);
471 onesec = ktime_set(1, 0);
473 rtc->
uie_rtctimer.node.expires = ktime_add(now, onesec);
481 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
513 spin_unlock_irqrestore(&rtc->
irq_lock, flags);
568 count = hrtimer_forward_now(timer, period);
583 unsigned long num,
unsigned long events)
592 char *
name = (
char *)data;
594 if (
strcmp(dev_name(dev), name) == 0)
609 if (!try_module_get(rtc->
owner)) {
621 module_put(rtc->
owner);
704 if (rtc_update_hrtimer(rtc, enabled) < 0) {
741 if (rtc->
pie_enabled && rtc_update_hrtimer(rtc, 1) < 0) {
773 err = __rtc_set_alarm(rtc, &alarm);
785 static void rtc_alarm_disable(
struct rtc_device *rtc)
787 if (!rtc->
ops || !rtc->
ops->alarm_irq_enable)
790 rtc->
ops->alarm_irq_enable(rtc->
dev.parent,
false);
810 if (next == &timer->
node) {
815 rtc_alarm_disable(rtc);
820 err = __rtc_set_alarm(rtc, &alarm);
849 __rtc_read_time(rtc, &tm);
851 while ((next = timerqueue_getnext(&rtc->
timerqueue))) {
859 if (timer->
task.func)
860 timer->
task.func(timer->
task.private_data);
863 if (ktime_to_ns(timer->
period)) {
864 timer->
node.expires = ktime_add(timer->
node.expires,
877 err = __rtc_set_alarm(rtc, &alarm);
881 rtc_alarm_disable(rtc);
896 timerqueue_init(&timer->
node);
898 timer->
task.func =
f;
916 rtc_timer_remove(rtc, timer);
918 timer->
node.expires = expires;
921 ret = rtc_timer_enqueue(rtc, timer);
938 rtc_timer_remove(rtc, timer);