Lines Matching refs:timer
20 static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer);
21 static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer);
649 enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer) in rtc_pie_update_irq() argument
655 rtc = container_of(timer, struct rtc_device, pie_timer); in rtc_pie_update_irq()
658 count = hrtimer_forward_now(timer, period); in rtc_pie_update_irq()
791 static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_enqueue() argument
802 timer->enabled = 1; in rtc_timer_enqueue()
812 timerqueue_add(&rtc->timerqueue, &timer->node); in rtc_timer_enqueue()
813 trace_rtc_timer_enqueue(timer); in rtc_timer_enqueue()
814 if (!next || ktime_before(timer->node.expires, next->expires)) { in rtc_timer_enqueue()
817 alarm.time = rtc_ktime_to_tm(timer->node.expires); in rtc_timer_enqueue()
824 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_enqueue()
825 trace_rtc_timer_dequeue(timer); in rtc_timer_enqueue()
826 timer->enabled = 0; in rtc_timer_enqueue()
854 static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_remove() argument
858 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_remove()
859 trace_rtc_timer_dequeue(timer); in rtc_timer_remove()
860 timer->enabled = 0; in rtc_timer_remove()
861 if (next == &timer->node) { in rtc_timer_remove()
891 struct rtc_timer *timer; in rtc_timer_do_work() local
908 timer = container_of(next, struct rtc_timer, node); in rtc_timer_do_work()
909 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
910 trace_rtc_timer_dequeue(timer); in rtc_timer_do_work()
911 timer->enabled = 0; in rtc_timer_do_work()
912 if (timer->func) in rtc_timer_do_work()
913 timer->func(timer->rtc); in rtc_timer_do_work()
915 trace_rtc_timer_fired(timer); in rtc_timer_do_work()
917 if (ktime_to_ns(timer->period)) { in rtc_timer_do_work()
918 timer->node.expires = ktime_add(timer->node.expires, in rtc_timer_do_work()
919 timer->period); in rtc_timer_do_work()
920 timer->enabled = 1; in rtc_timer_do_work()
921 timerqueue_add(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
922 trace_rtc_timer_enqueue(timer); in rtc_timer_do_work()
942 timer = container_of(next, struct rtc_timer, node); in rtc_timer_do_work()
943 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
944 trace_rtc_timer_dequeue(timer); in rtc_timer_do_work()
945 timer->enabled = 0; in rtc_timer_do_work()
964 void rtc_timer_init(struct rtc_timer *timer, void (*f)(struct rtc_device *r), in rtc_timer_init() argument
967 timerqueue_init(&timer->node); in rtc_timer_init()
968 timer->enabled = 0; in rtc_timer_init()
969 timer->func = f; in rtc_timer_init()
970 timer->rtc = rtc; in rtc_timer_init()
981 int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer, in rtc_timer_start() argument
987 if (timer->enabled) in rtc_timer_start()
988 rtc_timer_remove(rtc, timer); in rtc_timer_start()
990 timer->node.expires = expires; in rtc_timer_start()
991 timer->period = period; in rtc_timer_start()
993 ret = rtc_timer_enqueue(rtc, timer); in rtc_timer_start()
1005 void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_cancel() argument
1008 if (timer->enabled) in rtc_timer_cancel()
1009 rtc_timer_remove(rtc, timer); in rtc_timer_cancel()