1
2
3
4
5
6
7
8
9
10
11
12
13
14#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
15
16#include <linux/module.h>
17#include <linux/of.h>
18#include <linux/rtc.h>
19#include <linux/kdev_t.h>
20#include <linux/idr.h>
21#include <linux/slab.h>
22#include <linux/workqueue.h>
23
24#include "rtc-core.h"
25
26
27static DEFINE_IDA(rtc_ida);
28struct class *rtc_class;
29
30static void rtc_device_release(struct device *dev)
31{
32 struct rtc_device *rtc = to_rtc_device(dev);
33 ida_simple_remove(&rtc_ida, rtc->id);
34 kfree(rtc);
35}
36
37#ifdef CONFIG_RTC_HCTOSYS_DEVICE
38
39int rtc_hctosys_ret = -ENODEV;
40#endif
41
42#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_RTC_HCTOSYS_DEVICE)
43
44
45
46
47
48static struct timespec64 old_rtc, old_system, old_delta;
49
50
51static int rtc_suspend(struct device *dev)
52{
53 struct rtc_device *rtc = to_rtc_device(dev);
54 struct rtc_time tm;
55 struct timespec64 delta, delta_delta;
56 int err;
57
58 if (timekeeping_rtc_skipsuspend())
59 return 0;
60
61 if (strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE) != 0)
62 return 0;
63
64
65 err = rtc_read_time(rtc, &tm);
66 if (err < 0) {
67 pr_debug("%s: fail to read rtc time\n", dev_name(&rtc->dev));
68 return 0;
69 }
70
71 ktime_get_real_ts64(&old_system);
72 old_rtc.tv_sec = rtc_tm_to_time64(&tm);
73
74
75
76
77
78
79
80
81 delta = timespec64_sub(old_system, old_rtc);
82 delta_delta = timespec64_sub(delta, old_delta);
83 if (delta_delta.tv_sec < -2 || delta_delta.tv_sec >= 2) {
84
85
86
87
88 old_delta = delta;
89 } else {
90
91 old_system = timespec64_sub(old_system, delta_delta);
92 }
93
94 return 0;
95}
96
97static int rtc_resume(struct device *dev)
98{
99 struct rtc_device *rtc = to_rtc_device(dev);
100 struct rtc_time tm;
101 struct timespec64 new_system, new_rtc;
102 struct timespec64 sleep_time;
103 int err;
104
105 if (timekeeping_rtc_skipresume())
106 return 0;
107
108 rtc_hctosys_ret = -ENODEV;
109 if (strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE) != 0)
110 return 0;
111
112
113 ktime_get_real_ts64(&new_system);
114 err = rtc_read_time(rtc, &tm);
115 if (err < 0) {
116 pr_debug("%s: fail to read rtc time\n", dev_name(&rtc->dev));
117 return 0;
118 }
119
120 new_rtc.tv_sec = rtc_tm_to_time64(&tm);
121 new_rtc.tv_nsec = 0;
122
123 if (new_rtc.tv_sec < old_rtc.tv_sec) {
124 pr_debug("%s: time travel!\n", dev_name(&rtc->dev));
125 return 0;
126 }
127
128
129 sleep_time = timespec64_sub(new_rtc, old_rtc);
130
131
132
133
134
135
136
137
138 sleep_time = timespec64_sub(sleep_time,
139 timespec64_sub(new_system, old_system));
140
141 if (sleep_time.tv_sec >= 0)
142 timekeeping_inject_sleeptime64(&sleep_time);
143 rtc_hctosys_ret = 0;
144 return 0;
145}
146
147static SIMPLE_DEV_PM_OPS(rtc_class_dev_pm_ops, rtc_suspend, rtc_resume);
148#define RTC_CLASS_DEV_PM_OPS (&rtc_class_dev_pm_ops)
149#else
150#define RTC_CLASS_DEV_PM_OPS NULL
151#endif
152
153
154static struct rtc_device *rtc_allocate_device(void)
155{
156 struct rtc_device *rtc;
157
158 rtc = kzalloc(sizeof(*rtc), GFP_KERNEL);
159 if (!rtc)
160 return NULL;
161
162 device_initialize(&rtc->dev);
163
164
165 rtc->set_offset_nsec = NSEC_PER_SEC / 2;
166
167 rtc->irq_freq = 1;
168 rtc->max_user_freq = 64;
169 rtc->dev.class = rtc_class;
170 rtc->dev.groups = rtc_get_dev_attribute_groups();
171 rtc->dev.release = rtc_device_release;
172
173 mutex_init(&rtc->ops_lock);
174 spin_lock_init(&rtc->irq_lock);
175 init_waitqueue_head(&rtc->irq_queue);
176
177
178 timerqueue_init_head(&rtc->timerqueue);
179 INIT_WORK(&rtc->irqwork, rtc_timer_do_work);
180
181 rtc_timer_init(&rtc->aie_timer, rtc_aie_update_irq, (void *)rtc);
182
183 rtc_timer_init(&rtc->uie_rtctimer, rtc_uie_update_irq, (void *)rtc);
184
185 hrtimer_init(&rtc->pie_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
186 rtc->pie_timer.function = rtc_pie_update_irq;
187 rtc->pie_enabled = 0;
188
189 return rtc;
190}
191
192static int rtc_device_get_id(struct device *dev)
193{
194 int of_id = -1, id = -1;
195
196 if (dev->of_node)
197 of_id = of_alias_get_id(dev->of_node, "rtc");
198 else if (dev->parent && dev->parent->of_node)
199 of_id = of_alias_get_id(dev->parent->of_node, "rtc");
200
201 if (of_id >= 0) {
202 id = ida_simple_get(&rtc_ida, of_id, of_id + 1, GFP_KERNEL);
203 if (id < 0)
204 dev_warn(dev, "/aliases ID %d not available\n", of_id);
205 }
206
207 if (id < 0)
208 id = ida_simple_get(&rtc_ida, 0, 0, GFP_KERNEL);
209
210 return id;
211}
212
213static void rtc_device_get_offset(struct rtc_device *rtc)
214{
215 time64_t range_secs;
216 u32 start_year;
217 int ret;
218
219
220
221
222
223
224 if (rtc->range_min == rtc->range_max)
225 return;
226
227 ret = device_property_read_u32(rtc->dev.parent, "start-year",
228 &start_year);
229 if (!ret) {
230 rtc->start_secs = mktime64(start_year, 1, 1, 0, 0, 0);
231 rtc->set_start_time = true;
232 }
233
234
235
236
237
238 if (!rtc->set_start_time)
239 return;
240
241 range_secs = rtc->range_max - rtc->range_min + 1;
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269 if (rtc->start_secs > rtc->range_max ||
270 rtc->start_secs + range_secs - 1 < rtc->range_min)
271 rtc->offset_secs = rtc->start_secs - rtc->range_min;
272 else if (rtc->start_secs > rtc->range_min)
273 rtc->offset_secs = range_secs;
274 else if (rtc->start_secs < rtc->range_min)
275 rtc->offset_secs = -range_secs;
276 else
277 rtc->offset_secs = 0;
278}
279
280
281
282
283
284
285
286
287
288
289static struct rtc_device *rtc_device_register(const char *name,
290 struct device *dev,
291 const struct rtc_class_ops *ops,
292 struct module *owner)
293{
294 struct rtc_device *rtc;
295 struct rtc_wkalrm alrm;
296 int id, err;
297
298 id = rtc_device_get_id(dev);
299 if (id < 0) {
300 err = id;
301 goto exit;
302 }
303
304 rtc = rtc_allocate_device();
305 if (!rtc) {
306 err = -ENOMEM;
307 goto exit_ida;
308 }
309
310 rtc->id = id;
311 rtc->ops = ops;
312 rtc->owner = owner;
313 rtc->dev.parent = dev;
314
315 dev_set_name(&rtc->dev, "rtc%d", id);
316
317 rtc_device_get_offset(rtc);
318
319
320 err = __rtc_read_alarm(rtc, &alrm);
321
322 if (!err && !rtc_valid_tm(&alrm.time))
323 rtc_initialize_alarm(rtc, &alrm);
324
325 rtc_dev_prepare(rtc);
326
327 err = cdev_device_add(&rtc->char_dev, &rtc->dev);
328 if (err) {
329 dev_warn(&rtc->dev, "%s: failed to add char device %d:%d\n",
330 name, MAJOR(rtc->dev.devt), rtc->id);
331
332
333 put_device(&rtc->dev);
334 goto exit;
335 } else {
336 dev_dbg(&rtc->dev, "%s: dev (%d:%d)\n", name,
337 MAJOR(rtc->dev.devt), rtc->id);
338 }
339
340 rtc_proc_add_device(rtc);
341
342 dev_info(dev, "rtc core: registered %s as %s\n",
343 name, dev_name(&rtc->dev));
344
345 return rtc;
346
347exit_ida:
348 ida_simple_remove(&rtc_ida, id);
349
350exit:
351 dev_err(dev, "rtc core: unable to register %s, err = %d\n",
352 name, err);
353 return ERR_PTR(err);
354}
355
356
357
358
359
360
361static void rtc_device_unregister(struct rtc_device *rtc)
362{
363 mutex_lock(&rtc->ops_lock);
364
365
366
367
368 rtc_proc_del_device(rtc);
369 cdev_device_del(&rtc->char_dev, &rtc->dev);
370 rtc->ops = NULL;
371 mutex_unlock(&rtc->ops_lock);
372 put_device(&rtc->dev);
373}
374
375static void devm_rtc_device_release(struct device *dev, void *res)
376{
377 struct rtc_device *rtc = *(struct rtc_device **)res;
378
379 rtc_nvmem_unregister(rtc);
380 rtc_device_unregister(rtc);
381}
382
383static int devm_rtc_device_match(struct device *dev, void *res, void *data)
384{
385 struct rtc **r = res;
386
387 return *r == data;
388}
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404struct rtc_device *devm_rtc_device_register(struct device *dev,
405 const char *name,
406 const struct rtc_class_ops *ops,
407 struct module *owner)
408{
409 struct rtc_device **ptr, *rtc;
410
411 ptr = devres_alloc(devm_rtc_device_release, sizeof(*ptr), GFP_KERNEL);
412 if (!ptr)
413 return ERR_PTR(-ENOMEM);
414
415 rtc = rtc_device_register(name, dev, ops, owner);
416 if (!IS_ERR(rtc)) {
417 *ptr = rtc;
418 devres_add(dev, ptr);
419 } else {
420 devres_free(ptr);
421 }
422
423 return rtc;
424}
425EXPORT_SYMBOL_GPL(devm_rtc_device_register);
426
427
428
429
430
431
432
433
434
435
436void devm_rtc_device_unregister(struct device *dev, struct rtc_device *rtc)
437{
438 int rc;
439
440 rc = devres_release(dev, devm_rtc_device_release,
441 devm_rtc_device_match, rtc);
442 WARN_ON(rc);
443}
444EXPORT_SYMBOL_GPL(devm_rtc_device_unregister);
445
446static void devm_rtc_release_device(struct device *dev, void *res)
447{
448 struct rtc_device *rtc = *(struct rtc_device **)res;
449
450 rtc_nvmem_unregister(rtc);
451
452 if (rtc->registered)
453 rtc_device_unregister(rtc);
454 else
455 put_device(&rtc->dev);
456}
457
458struct rtc_device *devm_rtc_allocate_device(struct device *dev)
459{
460 struct rtc_device **ptr, *rtc;
461 int id, err;
462
463 id = rtc_device_get_id(dev);
464 if (id < 0)
465 return ERR_PTR(id);
466
467 ptr = devres_alloc(devm_rtc_release_device, sizeof(*ptr), GFP_KERNEL);
468 if (!ptr) {
469 err = -ENOMEM;
470 goto exit_ida;
471 }
472
473 rtc = rtc_allocate_device();
474 if (!rtc) {
475 err = -ENOMEM;
476 goto exit_devres;
477 }
478
479 *ptr = rtc;
480 devres_add(dev, ptr);
481
482 rtc->id = id;
483 rtc->dev.parent = dev;
484 dev_set_name(&rtc->dev, "rtc%d", id);
485
486 return rtc;
487
488exit_devres:
489 devres_free(ptr);
490exit_ida:
491 ida_simple_remove(&rtc_ida, id);
492 return ERR_PTR(err);
493}
494EXPORT_SYMBOL_GPL(devm_rtc_allocate_device);
495
496int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
497{
498 struct rtc_wkalrm alrm;
499 int err;
500
501 if (!rtc->ops)
502 return -EINVAL;
503
504 rtc->owner = owner;
505 rtc_device_get_offset(rtc);
506
507
508 err = __rtc_read_alarm(rtc, &alrm);
509 if (!err && !rtc_valid_tm(&alrm.time))
510 rtc_initialize_alarm(rtc, &alrm);
511
512 rtc_dev_prepare(rtc);
513
514 err = cdev_device_add(&rtc->char_dev, &rtc->dev);
515 if (err)
516 dev_warn(rtc->dev.parent, "failed to add char device %d:%d\n",
517 MAJOR(rtc->dev.devt), rtc->id);
518 else
519 dev_dbg(rtc->dev.parent, "char device (%d:%d)\n",
520 MAJOR(rtc->dev.devt), rtc->id);
521
522 rtc_proc_add_device(rtc);
523
524 rtc->registered = true;
525 dev_info(rtc->dev.parent, "registered as %s\n",
526 dev_name(&rtc->dev));
527
528 return 0;
529}
530EXPORT_SYMBOL_GPL(__rtc_register_device);
531
532static int __init rtc_init(void)
533{
534 rtc_class = class_create(THIS_MODULE, "rtc");
535 if (IS_ERR(rtc_class)) {
536 pr_err("couldn't create class\n");
537 return PTR_ERR(rtc_class);
538 }
539 rtc_class->pm = RTC_CLASS_DEV_PM_OPS;
540 rtc_dev_init();
541 return 0;
542}
543subsys_initcall(rtc_init);
544