Merge branch 'parisc-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[cascardo/linux.git] / drivers / rtc / interface.c
1 /*
2  * RTC subsystem, interface functions
3  *
4  * Copyright (C) 2005 Tower Technologies
5  * Author: Alessandro Zummo <a.zummo@towertech.it>
6  *
7  * based on arch/arm/common/rtctime.c
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12 */
13
14 #include <linux/rtc.h>
15 #include <linux/sched.h>
16 #include <linux/module.h>
17 #include <linux/log2.h>
18 #include <linux/workqueue.h>
19
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);
22
23 static int __rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm)
24 {
25         int err;
26         if (!rtc->ops)
27                 err = -ENODEV;
28         else if (!rtc->ops->read_time)
29                 err = -EINVAL;
30         else {
31                 memset(tm, 0, sizeof(struct rtc_time));
32                 err = rtc->ops->read_time(rtc->dev.parent, tm);
33                 if (err < 0) {
34                         dev_dbg(&rtc->dev, "read_time: fail to read: %d\n",
35                                 err);
36                         return err;
37                 }
38
39                 err = rtc_valid_tm(tm);
40                 if (err < 0)
41                         dev_dbg(&rtc->dev, "read_time: rtc_time isn't valid\n");
42         }
43         return err;
44 }
45
46 int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm)
47 {
48         int err;
49
50         err = mutex_lock_interruptible(&rtc->ops_lock);
51         if (err)
52                 return err;
53
54         err = __rtc_read_time(rtc, tm);
55         mutex_unlock(&rtc->ops_lock);
56         return err;
57 }
58 EXPORT_SYMBOL_GPL(rtc_read_time);
59
60 int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
61 {
62         int err;
63
64         err = rtc_valid_tm(tm);
65         if (err != 0)
66                 return err;
67
68         err = mutex_lock_interruptible(&rtc->ops_lock);
69         if (err)
70                 return err;
71
72         if (!rtc->ops)
73                 err = -ENODEV;
74         else if (rtc->ops->set_time)
75                 err = rtc->ops->set_time(rtc->dev.parent, tm);
76         else if (rtc->ops->set_mmss64) {
77                 time64_t secs64 = rtc_tm_to_time64(tm);
78
79                 err = rtc->ops->set_mmss64(rtc->dev.parent, secs64);
80         } else if (rtc->ops->set_mmss) {
81                 time64_t secs64 = rtc_tm_to_time64(tm);
82                 err = rtc->ops->set_mmss(rtc->dev.parent, secs64);
83         } else
84                 err = -EINVAL;
85
86         pm_stay_awake(rtc->dev.parent);
87         mutex_unlock(&rtc->ops_lock);
88         /* A timer might have just expired */
89         schedule_work(&rtc->irqwork);
90         return err;
91 }
92 EXPORT_SYMBOL_GPL(rtc_set_time);
93
94 static int rtc_read_alarm_internal(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
95 {
96         int err;
97
98         err = mutex_lock_interruptible(&rtc->ops_lock);
99         if (err)
100                 return err;
101
102         if (rtc->ops == NULL)
103                 err = -ENODEV;
104         else if (!rtc->ops->read_alarm)
105                 err = -EINVAL;
106         else {
107                 alarm->enabled = 0;
108                 alarm->pending = 0;
109                 alarm->time.tm_sec = -1;
110                 alarm->time.tm_min = -1;
111                 alarm->time.tm_hour = -1;
112                 alarm->time.tm_mday = -1;
113                 alarm->time.tm_mon = -1;
114                 alarm->time.tm_year = -1;
115                 alarm->time.tm_wday = -1;
116                 alarm->time.tm_yday = -1;
117                 alarm->time.tm_isdst = -1;
118                 err = rtc->ops->read_alarm(rtc->dev.parent, alarm);
119         }
120
121         mutex_unlock(&rtc->ops_lock);
122         return err;
123 }
124
125 int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
126 {
127         int err;
128         struct rtc_time before, now;
129         int first_time = 1;
130         time64_t t_now, t_alm;
131         enum { none, day, month, year } missing = none;
132         unsigned days;
133
134         /* The lower level RTC driver may return -1 in some fields,
135          * creating invalid alarm->time values, for reasons like:
136          *
137          *   - The hardware may not be capable of filling them in;
138          *     many alarms match only on time-of-day fields, not
139          *     day/month/year calendar data.
140          *
141          *   - Some hardware uses illegal values as "wildcard" match
142          *     values, which non-Linux firmware (like a BIOS) may try
143          *     to set up as e.g. "alarm 15 minutes after each hour".
144          *     Linux uses only oneshot alarms.
145          *
146          * When we see that here, we deal with it by using values from
147          * a current RTC timestamp for any missing (-1) values.  The
148          * RTC driver prevents "periodic alarm" modes.
149          *
150          * But this can be racey, because some fields of the RTC timestamp
151          * may have wrapped in the interval since we read the RTC alarm,
152          * which would lead to us inserting inconsistent values in place
153          * of the -1 fields.
154          *
155          * Reading the alarm and timestamp in the reverse sequence
156          * would have the same race condition, and not solve the issue.
157          *
158          * So, we must first read the RTC timestamp,
159          * then read the RTC alarm value,
160          * and then read a second RTC timestamp.
161          *
162          * If any fields of the second timestamp have changed
163          * when compared with the first timestamp, then we know
164          * our timestamp may be inconsistent with that used by
165          * the low-level rtc_read_alarm_internal() function.
166          *
167          * So, when the two timestamps disagree, we just loop and do
168          * the process again to get a fully consistent set of values.
169          *
170          * This could all instead be done in the lower level driver,
171          * but since more than one lower level RTC implementation needs it,
172          * then it's probably best best to do it here instead of there..
173          */
174
175         /* Get the "before" timestamp */
176         err = rtc_read_time(rtc, &before);
177         if (err < 0)
178                 return err;
179         do {
180                 if (!first_time)
181                         memcpy(&before, &now, sizeof(struct rtc_time));
182                 first_time = 0;
183
184                 /* get the RTC alarm values, which may be incomplete */
185                 err = rtc_read_alarm_internal(rtc, alarm);
186                 if (err)
187                         return err;
188
189                 /* full-function RTCs won't have such missing fields */
190                 if (rtc_valid_tm(&alarm->time) == 0)
191                         return 0;
192
193                 /* get the "after" timestamp, to detect wrapped fields */
194                 err = rtc_read_time(rtc, &now);
195                 if (err < 0)
196                         return err;
197
198                 /* note that tm_sec is a "don't care" value here: */
199         } while (   before.tm_min   != now.tm_min
200                  || before.tm_hour  != now.tm_hour
201                  || before.tm_mon   != now.tm_mon
202                  || before.tm_year  != now.tm_year);
203
204         /* Fill in the missing alarm fields using the timestamp; we
205          * know there's at least one since alarm->time is invalid.
206          */
207         if (alarm->time.tm_sec == -1)
208                 alarm->time.tm_sec = now.tm_sec;
209         if (alarm->time.tm_min == -1)
210                 alarm->time.tm_min = now.tm_min;
211         if (alarm->time.tm_hour == -1)
212                 alarm->time.tm_hour = now.tm_hour;
213
214         /* For simplicity, only support date rollover for now */
215         if (alarm->time.tm_mday < 1 || alarm->time.tm_mday > 31) {
216                 alarm->time.tm_mday = now.tm_mday;
217                 missing = day;
218         }
219         if ((unsigned)alarm->time.tm_mon >= 12) {
220                 alarm->time.tm_mon = now.tm_mon;
221                 if (missing == none)
222                         missing = month;
223         }
224         if (alarm->time.tm_year == -1) {
225                 alarm->time.tm_year = now.tm_year;
226                 if (missing == none)
227                         missing = year;
228         }
229
230         /* with luck, no rollover is needed */
231         t_now = rtc_tm_to_time64(&now);
232         t_alm = rtc_tm_to_time64(&alarm->time);
233         if (t_now < t_alm)
234                 goto done;
235
236         switch (missing) {
237
238         /* 24 hour rollover ... if it's now 10am Monday, an alarm that
239          * that will trigger at 5am will do so at 5am Tuesday, which
240          * could also be in the next month or year.  This is a common
241          * case, especially for PCs.
242          */
243         case day:
244                 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "day");
245                 t_alm += 24 * 60 * 60;
246                 rtc_time64_to_tm(t_alm, &alarm->time);
247                 break;
248
249         /* Month rollover ... if it's the 31th, an alarm on the 3rd will
250          * be next month.  An alarm matching on the 30th, 29th, or 28th
251          * may end up in the month after that!  Many newer PCs support
252          * this type of alarm.
253          */
254         case month:
255                 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "month");
256                 do {
257                         if (alarm->time.tm_mon < 11)
258                                 alarm->time.tm_mon++;
259                         else {
260                                 alarm->time.tm_mon = 0;
261                                 alarm->time.tm_year++;
262                         }
263                         days = rtc_month_days(alarm->time.tm_mon,
264                                         alarm->time.tm_year);
265                 } while (days < alarm->time.tm_mday);
266                 break;
267
268         /* Year rollover ... easy except for leap years! */
269         case year:
270                 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "year");
271                 do {
272                         alarm->time.tm_year++;
273                 } while (!is_leap_year(alarm->time.tm_year + 1900)
274                         && rtc_valid_tm(&alarm->time) != 0);
275                 break;
276
277         default:
278                 dev_warn(&rtc->dev, "alarm rollover not handled\n");
279         }
280
281 done:
282         err = rtc_valid_tm(&alarm->time);
283
284         if (err) {
285                 dev_warn(&rtc->dev, "invalid alarm value: %d-%d-%d %d:%d:%d\n",
286                         alarm->time.tm_year + 1900, alarm->time.tm_mon + 1,
287                         alarm->time.tm_mday, alarm->time.tm_hour, alarm->time.tm_min,
288                         alarm->time.tm_sec);
289         }
290
291         return err;
292 }
293
294 int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
295 {
296         int err;
297
298         err = mutex_lock_interruptible(&rtc->ops_lock);
299         if (err)
300                 return err;
301         if (rtc->ops == NULL)
302                 err = -ENODEV;
303         else if (!rtc->ops->read_alarm)
304                 err = -EINVAL;
305         else {
306                 memset(alarm, 0, sizeof(struct rtc_wkalrm));
307                 alarm->enabled = rtc->aie_timer.enabled;
308                 alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires);
309         }
310         mutex_unlock(&rtc->ops_lock);
311
312         return err;
313 }
314 EXPORT_SYMBOL_GPL(rtc_read_alarm);
315
316 static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
317 {
318         struct rtc_time tm;
319         time64_t now, scheduled;
320         int err;
321
322         err = rtc_valid_tm(&alarm->time);
323         if (err)
324                 return err;
325         scheduled = rtc_tm_to_time64(&alarm->time);
326
327         /* Make sure we're not setting alarms in the past */
328         err = __rtc_read_time(rtc, &tm);
329         if (err)
330                 return err;
331         now = rtc_tm_to_time64(&tm);
332         if (scheduled <= now)
333                 return -ETIME;
334         /*
335          * XXX - We just checked to make sure the alarm time is not
336          * in the past, but there is still a race window where if
337          * the is alarm set for the next second and the second ticks
338          * over right here, before we set the alarm.
339          */
340
341         if (!rtc->ops)
342                 err = -ENODEV;
343         else if (!rtc->ops->set_alarm)
344                 err = -EINVAL;
345         else
346                 err = rtc->ops->set_alarm(rtc->dev.parent, alarm);
347
348         return err;
349 }
350
351 int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
352 {
353         int err;
354
355         err = rtc_valid_tm(&alarm->time);
356         if (err != 0)
357                 return err;
358
359         err = mutex_lock_interruptible(&rtc->ops_lock);
360         if (err)
361                 return err;
362         if (rtc->aie_timer.enabled)
363                 rtc_timer_remove(rtc, &rtc->aie_timer);
364
365         rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time);
366         rtc->aie_timer.period = ktime_set(0, 0);
367         if (alarm->enabled)
368                 err = rtc_timer_enqueue(rtc, &rtc->aie_timer);
369
370         mutex_unlock(&rtc->ops_lock);
371         return err;
372 }
373 EXPORT_SYMBOL_GPL(rtc_set_alarm);
374
375 /* Called once per device from rtc_device_register */
376 int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
377 {
378         int err;
379         struct rtc_time now;
380
381         err = rtc_valid_tm(&alarm->time);
382         if (err != 0)
383                 return err;
384
385         err = rtc_read_time(rtc, &now);
386         if (err)
387                 return err;
388
389         err = mutex_lock_interruptible(&rtc->ops_lock);
390         if (err)
391                 return err;
392
393         rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time);
394         rtc->aie_timer.period = ktime_set(0, 0);
395
396         /* Alarm has to be enabled & in the future for us to enqueue it */
397         if (alarm->enabled && (rtc_tm_to_ktime(now).tv64 <
398                          rtc->aie_timer.node.expires.tv64)) {
399
400                 rtc->aie_timer.enabled = 1;
401                 timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node);
402         }
403         mutex_unlock(&rtc->ops_lock);
404         return err;
405 }
406 EXPORT_SYMBOL_GPL(rtc_initialize_alarm);
407
408 int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled)
409 {
410         int err = mutex_lock_interruptible(&rtc->ops_lock);
411         if (err)
412                 return err;
413
414         if (rtc->aie_timer.enabled != enabled) {
415                 if (enabled)
416                         err = rtc_timer_enqueue(rtc, &rtc->aie_timer);
417                 else
418                         rtc_timer_remove(rtc, &rtc->aie_timer);
419         }
420
421         if (err)
422                 /* nothing */;
423         else if (!rtc->ops)
424                 err = -ENODEV;
425         else if (!rtc->ops->alarm_irq_enable)
426                 err = -EINVAL;
427         else
428                 err = rtc->ops->alarm_irq_enable(rtc->dev.parent, enabled);
429
430         mutex_unlock(&rtc->ops_lock);
431         return err;
432 }
433 EXPORT_SYMBOL_GPL(rtc_alarm_irq_enable);
434
435 int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
436 {
437         int err = mutex_lock_interruptible(&rtc->ops_lock);
438         if (err)
439                 return err;
440
441 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
442         if (enabled == 0 && rtc->uie_irq_active) {
443                 mutex_unlock(&rtc->ops_lock);
444                 return rtc_dev_update_irq_enable_emul(rtc, 0);
445         }
446 #endif
447         /* make sure we're changing state */
448         if (rtc->uie_rtctimer.enabled == enabled)
449                 goto out;
450
451         if (rtc->uie_unsupported) {
452                 err = -EINVAL;
453                 goto out;
454         }
455
456         if (enabled) {
457                 struct rtc_time tm;
458                 ktime_t now, onesec;
459
460                 __rtc_read_time(rtc, &tm);
461                 onesec = ktime_set(1, 0);
462                 now = rtc_tm_to_ktime(tm);
463                 rtc->uie_rtctimer.node.expires = ktime_add(now, onesec);
464                 rtc->uie_rtctimer.period = ktime_set(1, 0);
465                 err = rtc_timer_enqueue(rtc, &rtc->uie_rtctimer);
466         } else
467                 rtc_timer_remove(rtc, &rtc->uie_rtctimer);
468
469 out:
470         mutex_unlock(&rtc->ops_lock);
471 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
472         /*
473          * Enable emulation if the driver did not provide
474          * the update_irq_enable function pointer or if returned
475          * -EINVAL to signal that it has been configured without
476          * interrupts or that are not available at the moment.
477          */
478         if (err == -EINVAL)
479                 err = rtc_dev_update_irq_enable_emul(rtc, enabled);
480 #endif
481         return err;
482
483 }
484 EXPORT_SYMBOL_GPL(rtc_update_irq_enable);
485
486
487 /**
488  * rtc_handle_legacy_irq - AIE, UIE and PIE event hook
489  * @rtc: pointer to the rtc device
490  *
491  * This function is called when an AIE, UIE or PIE mode interrupt
492  * has occurred (or been emulated).
493  *
494  * Triggers the registered irq_task function callback.
495  */
496 void rtc_handle_legacy_irq(struct rtc_device *rtc, int num, int mode)
497 {
498         unsigned long flags;
499
500         /* mark one irq of the appropriate mode */
501         spin_lock_irqsave(&rtc->irq_lock, flags);
502         rtc->irq_data = (rtc->irq_data + (num << 8)) | (RTC_IRQF|mode);
503         spin_unlock_irqrestore(&rtc->irq_lock, flags);
504
505         /* call the task func */
506         spin_lock_irqsave(&rtc->irq_task_lock, flags);
507         if (rtc->irq_task)
508                 rtc->irq_task->func(rtc->irq_task->private_data);
509         spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
510
511         wake_up_interruptible(&rtc->irq_queue);
512         kill_fasync(&rtc->async_queue, SIGIO, POLL_IN);
513 }
514
515
516 /**
517  * rtc_aie_update_irq - AIE mode rtctimer hook
518  * @private: pointer to the rtc_device
519  *
520  * This functions is called when the aie_timer expires.
521  */
522 void rtc_aie_update_irq(void *private)
523 {
524         struct rtc_device *rtc = (struct rtc_device *)private;
525         rtc_handle_legacy_irq(rtc, 1, RTC_AF);
526 }
527
528
529 /**
530  * rtc_uie_update_irq - UIE mode rtctimer hook
531  * @private: pointer to the rtc_device
532  *
533  * This functions is called when the uie_timer expires.
534  */
535 void rtc_uie_update_irq(void *private)
536 {
537         struct rtc_device *rtc = (struct rtc_device *)private;
538         rtc_handle_legacy_irq(rtc, 1,  RTC_UF);
539 }
540
541
542 /**
543  * rtc_pie_update_irq - PIE mode hrtimer hook
544  * @timer: pointer to the pie mode hrtimer
545  *
546  * This function is used to emulate PIE mode interrupts
547  * using an hrtimer. This function is called when the periodic
548  * hrtimer expires.
549  */
550 enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer)
551 {
552         struct rtc_device *rtc;
553         ktime_t period;
554         int count;
555         rtc = container_of(timer, struct rtc_device, pie_timer);
556
557         period = ktime_set(0, NSEC_PER_SEC/rtc->irq_freq);
558         count = hrtimer_forward_now(timer, period);
559
560         rtc_handle_legacy_irq(rtc, count, RTC_PF);
561
562         return HRTIMER_RESTART;
563 }
564
565 /**
566  * rtc_update_irq - Triggered when a RTC interrupt occurs.
567  * @rtc: the rtc device
568  * @num: how many irqs are being reported (usually one)
569  * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF
570  * Context: any
571  */
572 void rtc_update_irq(struct rtc_device *rtc,
573                 unsigned long num, unsigned long events)
574 {
575         if (IS_ERR_OR_NULL(rtc))
576                 return;
577
578         pm_stay_awake(rtc->dev.parent);
579         schedule_work(&rtc->irqwork);
580 }
581 EXPORT_SYMBOL_GPL(rtc_update_irq);
582
583 static int __rtc_match(struct device *dev, const void *data)
584 {
585         const char *name = data;
586
587         if (strcmp(dev_name(dev), name) == 0)
588                 return 1;
589         return 0;
590 }
591
592 struct rtc_device *rtc_class_open(const char *name)
593 {
594         struct device *dev;
595         struct rtc_device *rtc = NULL;
596
597         dev = class_find_device(rtc_class, NULL, name, __rtc_match);
598         if (dev)
599                 rtc = to_rtc_device(dev);
600
601         if (rtc) {
602                 if (!try_module_get(rtc->owner)) {
603                         put_device(dev);
604                         rtc = NULL;
605                 }
606         }
607
608         return rtc;
609 }
610 EXPORT_SYMBOL_GPL(rtc_class_open);
611
612 void rtc_class_close(struct rtc_device *rtc)
613 {
614         module_put(rtc->owner);
615         put_device(&rtc->dev);
616 }
617 EXPORT_SYMBOL_GPL(rtc_class_close);
618
619 int rtc_irq_register(struct rtc_device *rtc, struct rtc_task *task)
620 {
621         int retval = -EBUSY;
622
623         if (task == NULL || task->func == NULL)
624                 return -EINVAL;
625
626         /* Cannot register while the char dev is in use */
627         if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags))
628                 return -EBUSY;
629
630         spin_lock_irq(&rtc->irq_task_lock);
631         if (rtc->irq_task == NULL) {
632                 rtc->irq_task = task;
633                 retval = 0;
634         }
635         spin_unlock_irq(&rtc->irq_task_lock);
636
637         clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
638
639         return retval;
640 }
641 EXPORT_SYMBOL_GPL(rtc_irq_register);
642
643 void rtc_irq_unregister(struct rtc_device *rtc, struct rtc_task *task)
644 {
645         spin_lock_irq(&rtc->irq_task_lock);
646         if (rtc->irq_task == task)
647                 rtc->irq_task = NULL;
648         spin_unlock_irq(&rtc->irq_task_lock);
649 }
650 EXPORT_SYMBOL_GPL(rtc_irq_unregister);
651
652 static int rtc_update_hrtimer(struct rtc_device *rtc, int enabled)
653 {
654         /*
655          * We always cancel the timer here first, because otherwise
656          * we could run into BUG_ON(timer->state != HRTIMER_STATE_CALLBACK);
657          * when we manage to start the timer before the callback
658          * returns HRTIMER_RESTART.
659          *
660          * We cannot use hrtimer_cancel() here as a running callback
661          * could be blocked on rtc->irq_task_lock and hrtimer_cancel()
662          * would spin forever.
663          */
664         if (hrtimer_try_to_cancel(&rtc->pie_timer) < 0)
665                 return -1;
666
667         if (enabled) {
668                 ktime_t period = ktime_set(0, NSEC_PER_SEC / rtc->irq_freq);
669
670                 hrtimer_start(&rtc->pie_timer, period, HRTIMER_MODE_REL);
671         }
672         return 0;
673 }
674
675 /**
676  * rtc_irq_set_state - enable/disable 2^N Hz periodic IRQs
677  * @rtc: the rtc device
678  * @task: currently registered with rtc_irq_register()
679  * @enabled: true to enable periodic IRQs
680  * Context: any
681  *
682  * Note that rtc_irq_set_freq() should previously have been used to
683  * specify the desired frequency of periodic IRQ task->func() callbacks.
684  */
685 int rtc_irq_set_state(struct rtc_device *rtc, struct rtc_task *task, int enabled)
686 {
687         int err = 0;
688         unsigned long flags;
689
690 retry:
691         spin_lock_irqsave(&rtc->irq_task_lock, flags);
692         if (rtc->irq_task != NULL && task == NULL)
693                 err = -EBUSY;
694         else if (rtc->irq_task != task)
695                 err = -EACCES;
696         else {
697                 if (rtc_update_hrtimer(rtc, enabled) < 0) {
698                         spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
699                         cpu_relax();
700                         goto retry;
701                 }
702                 rtc->pie_enabled = enabled;
703         }
704         spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
705         return err;
706 }
707 EXPORT_SYMBOL_GPL(rtc_irq_set_state);
708
709 /**
710  * rtc_irq_set_freq - set 2^N Hz periodic IRQ frequency for IRQ
711  * @rtc: the rtc device
712  * @task: currently registered with rtc_irq_register()
713  * @freq: positive frequency with which task->func() will be called
714  * Context: any
715  *
716  * Note that rtc_irq_set_state() is used to enable or disable the
717  * periodic IRQs.
718  */
719 int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq)
720 {
721         int err = 0;
722         unsigned long flags;
723
724         if (freq <= 0 || freq > RTC_MAX_FREQ)
725                 return -EINVAL;
726 retry:
727         spin_lock_irqsave(&rtc->irq_task_lock, flags);
728         if (rtc->irq_task != NULL && task == NULL)
729                 err = -EBUSY;
730         else if (rtc->irq_task != task)
731                 err = -EACCES;
732         else {
733                 rtc->irq_freq = freq;
734                 if (rtc->pie_enabled && rtc_update_hrtimer(rtc, 1) < 0) {
735                         spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
736                         cpu_relax();
737                         goto retry;
738                 }
739         }
740         spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
741         return err;
742 }
743 EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
744
745 /**
746  * rtc_timer_enqueue - Adds a rtc_timer to the rtc_device timerqueue
747  * @rtc rtc device
748  * @timer timer being added.
749  *
750  * Enqueues a timer onto the rtc devices timerqueue and sets
751  * the next alarm event appropriately.
752  *
753  * Sets the enabled bit on the added timer.
754  *
755  * Must hold ops_lock for proper serialization of timerqueue
756  */
757 static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
758 {
759         struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
760         struct rtc_time tm;
761         ktime_t now;
762
763         timer->enabled = 1;
764         __rtc_read_time(rtc, &tm);
765         now = rtc_tm_to_ktime(tm);
766
767         /* Skip over expired timers */
768         while (next) {
769                 if (next->expires.tv64 >= now.tv64)
770                         break;
771                 next = timerqueue_iterate_next(next);
772         }
773
774         timerqueue_add(&rtc->timerqueue, &timer->node);
775         if (!next) {
776                 struct rtc_wkalrm alarm;
777                 int err;
778                 alarm.time = rtc_ktime_to_tm(timer->node.expires);
779                 alarm.enabled = 1;
780                 err = __rtc_set_alarm(rtc, &alarm);
781                 if (err == -ETIME) {
782                         pm_stay_awake(rtc->dev.parent);
783                         schedule_work(&rtc->irqwork);
784                 } else if (err) {
785                         timerqueue_del(&rtc->timerqueue, &timer->node);
786                         timer->enabled = 0;
787                         return err;
788                 }
789         }
790         return 0;
791 }
792
793 static void rtc_alarm_disable(struct rtc_device *rtc)
794 {
795         if (!rtc->ops || !rtc->ops->alarm_irq_enable)
796                 return;
797
798         rtc->ops->alarm_irq_enable(rtc->dev.parent, false);
799 }
800
801 /**
802  * rtc_timer_remove - Removes a rtc_timer from the rtc_device timerqueue
803  * @rtc rtc device
804  * @timer timer being removed.
805  *
806  * Removes a timer onto the rtc devices timerqueue and sets
807  * the next alarm event appropriately.
808  *
809  * Clears the enabled bit on the removed timer.
810  *
811  * Must hold ops_lock for proper serialization of timerqueue
812  */
813 static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer)
814 {
815         struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
816         timerqueue_del(&rtc->timerqueue, &timer->node);
817         timer->enabled = 0;
818         if (next == &timer->node) {
819                 struct rtc_wkalrm alarm;
820                 int err;
821                 next = timerqueue_getnext(&rtc->timerqueue);
822                 if (!next) {
823                         rtc_alarm_disable(rtc);
824                         return;
825                 }
826                 alarm.time = rtc_ktime_to_tm(next->expires);
827                 alarm.enabled = 1;
828                 err = __rtc_set_alarm(rtc, &alarm);
829                 if (err == -ETIME) {
830                         pm_stay_awake(rtc->dev.parent);
831                         schedule_work(&rtc->irqwork);
832                 }
833         }
834 }
835
836 /**
837  * rtc_timer_do_work - Expires rtc timers
838  * @rtc rtc device
839  * @timer timer being removed.
840  *
841  * Expires rtc timers. Reprograms next alarm event if needed.
842  * Called via worktask.
843  *
844  * Serializes access to timerqueue via ops_lock mutex
845  */
846 void rtc_timer_do_work(struct work_struct *work)
847 {
848         struct rtc_timer *timer;
849         struct timerqueue_node *next;
850         ktime_t now;
851         struct rtc_time tm;
852
853         struct rtc_device *rtc =
854                 container_of(work, struct rtc_device, irqwork);
855
856         mutex_lock(&rtc->ops_lock);
857 again:
858         __rtc_read_time(rtc, &tm);
859         now = rtc_tm_to_ktime(tm);
860         while ((next = timerqueue_getnext(&rtc->timerqueue))) {
861                 if (next->expires.tv64 > now.tv64)
862                         break;
863
864                 /* expire timer */
865                 timer = container_of(next, struct rtc_timer, node);
866                 timerqueue_del(&rtc->timerqueue, &timer->node);
867                 timer->enabled = 0;
868                 if (timer->task.func)
869                         timer->task.func(timer->task.private_data);
870
871                 /* Re-add/fwd periodic timers */
872                 if (ktime_to_ns(timer->period)) {
873                         timer->node.expires = ktime_add(timer->node.expires,
874                                                         timer->period);
875                         timer->enabled = 1;
876                         timerqueue_add(&rtc->timerqueue, &timer->node);
877                 }
878         }
879
880         /* Set next alarm */
881         if (next) {
882                 struct rtc_wkalrm alarm;
883                 int err;
884                 int retry = 3;
885
886                 alarm.time = rtc_ktime_to_tm(next->expires);
887                 alarm.enabled = 1;
888 reprogram:
889                 err = __rtc_set_alarm(rtc, &alarm);
890                 if (err == -ETIME)
891                         goto again;
892                 else if (err) {
893                         if (retry-- > 0)
894                                 goto reprogram;
895
896                         timer = container_of(next, struct rtc_timer, node);
897                         timerqueue_del(&rtc->timerqueue, &timer->node);
898                         timer->enabled = 0;
899                         dev_err(&rtc->dev, "__rtc_set_alarm: err=%d\n", err);
900                         goto again;
901                 }
902         } else
903                 rtc_alarm_disable(rtc);
904
905         pm_relax(rtc->dev.parent);
906         mutex_unlock(&rtc->ops_lock);
907 }
908
909
910 /* rtc_timer_init - Initializes an rtc_timer
911  * @timer: timer to be intiialized
912  * @f: function pointer to be called when timer fires
913  * @data: private data passed to function pointer
914  *
915  * Kernel interface to initializing an rtc_timer.
916  */
917 void rtc_timer_init(struct rtc_timer *timer, void (*f)(void *p), void *data)
918 {
919         timerqueue_init(&timer->node);
920         timer->enabled = 0;
921         timer->task.func = f;
922         timer->task.private_data = data;
923 }
924
925 /* rtc_timer_start - Sets an rtc_timer to fire in the future
926  * @ rtc: rtc device to be used
927  * @ timer: timer being set
928  * @ expires: time at which to expire the timer
929  * @ period: period that the timer will recur
930  *
931  * Kernel interface to set an rtc_timer
932  */
933 int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer,
934                         ktime_t expires, ktime_t period)
935 {
936         int ret = 0;
937         mutex_lock(&rtc->ops_lock);
938         if (timer->enabled)
939                 rtc_timer_remove(rtc, timer);
940
941         timer->node.expires = expires;
942         timer->period = period;
943
944         ret = rtc_timer_enqueue(rtc, timer);
945
946         mutex_unlock(&rtc->ops_lock);
947         return ret;
948 }
949
950 /* rtc_timer_cancel - Stops an rtc_timer
951  * @ rtc: rtc device to be used
952  * @ timer: timer being set
953  *
954  * Kernel interface to cancel an rtc_timer
955  */
956 void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer)
957 {
958         mutex_lock(&rtc->ops_lock);
959         if (timer->enabled)
960                 rtc_timer_remove(rtc, timer);
961         mutex_unlock(&rtc->ops_lock);
962 }
963
964 /**
965  * rtc_read_offset - Read the amount of rtc offset in parts per billion
966  * @ rtc: rtc device to be used
967  * @ offset: the offset in parts per billion
968  *
969  * see below for details.
970  *
971  * Kernel interface to read rtc clock offset
972  * Returns 0 on success, or a negative number on error.
973  * If read_offset() is not implemented for the rtc, return -EINVAL
974  */
975 int rtc_read_offset(struct rtc_device *rtc, long *offset)
976 {
977         int ret;
978
979         if (!rtc->ops)
980                 return -ENODEV;
981
982         if (!rtc->ops->read_offset)
983                 return -EINVAL;
984
985         mutex_lock(&rtc->ops_lock);
986         ret = rtc->ops->read_offset(rtc->dev.parent, offset);
987         mutex_unlock(&rtc->ops_lock);
988         return ret;
989 }
990
991 /**
992  * rtc_set_offset - Adjusts the duration of the average second
993  * @ rtc: rtc device to be used
994  * @ offset: the offset in parts per billion
995  *
996  * Some rtc's allow an adjustment to the average duration of a second
997  * to compensate for differences in the actual clock rate due to temperature,
998  * the crystal, capacitor, etc.
999  *
1000  * Kernel interface to adjust an rtc clock offset.
1001  * Return 0 on success, or a negative number on error.
1002  * If the rtc offset is not setable (or not implemented), return -EINVAL
1003  */
1004 int rtc_set_offset(struct rtc_device *rtc, long offset)
1005 {
1006         int ret;
1007
1008         if (!rtc->ops)
1009                 return -ENODEV;
1010
1011         if (!rtc->ops->set_offset)
1012                 return -EINVAL;
1013
1014         mutex_lock(&rtc->ops_lock);
1015         ret = rtc->ops->set_offset(rtc->dev.parent, offset);
1016         mutex_unlock(&rtc->ops_lock);
1017         return ret;
1018 }