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);
542 enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer) in rtc_pie_update_irq() argument
547 rtc = container_of(timer, struct rtc_device, pie_timer); in rtc_pie_update_irq()
550 count = hrtimer_forward_now(timer, period); in rtc_pie_update_irq()
749 static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_enqueue() argument
751 timer->enabled = 1; in rtc_timer_enqueue()
752 timerqueue_add(&rtc->timerqueue, &timer->node); in rtc_timer_enqueue()
753 if (&timer->node == timerqueue_getnext(&rtc->timerqueue)) { in rtc_timer_enqueue()
756 alarm.time = rtc_ktime_to_tm(timer->node.expires); in rtc_timer_enqueue()
763 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_enqueue()
764 timer->enabled = 0; in rtc_timer_enqueue()
791 static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_remove() argument
794 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_remove()
795 timer->enabled = 0; in rtc_timer_remove()
796 if (next == &timer->node) { in rtc_timer_remove()
826 struct rtc_timer *timer; in rtc_timer_do_work() local
843 timer = container_of(next, struct rtc_timer, node); in rtc_timer_do_work()
844 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
845 timer->enabled = 0; in rtc_timer_do_work()
846 if (timer->task.func) in rtc_timer_do_work()
847 timer->task.func(timer->task.private_data); in rtc_timer_do_work()
850 if (ktime_to_ns(timer->period)) { in rtc_timer_do_work()
851 timer->node.expires = ktime_add(timer->node.expires, in rtc_timer_do_work()
852 timer->period); in rtc_timer_do_work()
853 timer->enabled = 1; in rtc_timer_do_work()
854 timerqueue_add(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
874 timer = container_of(next, struct rtc_timer, node); in rtc_timer_do_work()
875 timerqueue_del(&rtc->timerqueue, &timer->node); in rtc_timer_do_work()
876 timer->enabled = 0; in rtc_timer_do_work()
895 void rtc_timer_init(struct rtc_timer *timer, void (*f)(void *p), void *data) in rtc_timer_init() argument
897 timerqueue_init(&timer->node); in rtc_timer_init()
898 timer->enabled = 0; in rtc_timer_init()
899 timer->task.func = f; in rtc_timer_init()
900 timer->task.private_data = data; in rtc_timer_init()
911 int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer, in rtc_timer_start() argument
916 if (timer->enabled) in rtc_timer_start()
917 rtc_timer_remove(rtc, timer); in rtc_timer_start()
919 timer->node.expires = expires; in rtc_timer_start()
920 timer->period = period; in rtc_timer_start()
922 ret = rtc_timer_enqueue(rtc, timer); in rtc_timer_start()
934 void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer) in rtc_timer_cancel() argument
937 if (timer->enabled) in rtc_timer_cancel()
938 rtc_timer_remove(rtc, timer); in rtc_timer_cancel()