]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/rtc/class.c
RTC: Rework RTC code to use timerqueue for events
[karo-tx-linux.git] / drivers / rtc / class.c
index 565562ba6ac9dacc7d8aa4842c7ddedb29de074d..95d2b82762d671f2cb8ca5d9022dcacc20827ff4 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/kdev_t.h>
 #include <linux/idr.h>
 #include <linux/slab.h>
+#include <linux/workqueue.h>
 
 #include "rtc-core.h"
 
@@ -152,6 +153,18 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
        spin_lock_init(&rtc->irq_task_lock);
        init_waitqueue_head(&rtc->irq_queue);
 
+       /* Init timerqueue */
+       timerqueue_init_head(&rtc->timerqueue);
+       INIT_WORK(&rtc->irqwork, rtctimer_do_work);
+       /* Init aie timer */
+       rtctimer_init(&rtc->aie_timer, rtc_aie_update_irq, (void *)rtc);
+       /* Init uie timer */
+       rtctimer_init(&rtc->uie_rtctimer, rtc_uie_update_irq, (void *)rtc);
+       /* Init pie timer */
+       hrtimer_init(&rtc->pie_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+       rtc->pie_timer.function = rtc_pie_update_irq;
+       rtc->pie_enabled = 0;
+
        strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
        dev_set_name(&rtc->dev, "rtc%d", id);