1 // SPDX-License-Identifier: GPL-2.0
3 * RTC subsystem, base class
5 * Copyright (C) 2005 Tower Technologies
6 * Author: Alessandro Zummo <a.zummo@towertech.it>
8 * class skeleton from drivers/hwmon/hwmon.c
11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 #include <linux/module.h>
15 #include <linux/rtc.h>
16 #include <linux/kdev_t.h>
17 #include <linux/idr.h>
18 #include <linux/slab.h>
19 #include <linux/workqueue.h>
23 static DEFINE_IDA(rtc_ida
);
24 struct class *rtc_class
;
26 static void rtc_device_release(struct device
*dev
)
28 struct rtc_device
*rtc
= to_rtc_device(dev
);
30 ida_simple_remove(&rtc_ida
, rtc
->id
);
34 #ifdef CONFIG_RTC_HCTOSYS_DEVICE
35 /* Result of the last RTC to system clock attempt. */
36 int rtc_hctosys_ret
= -ENODEV
;
38 /* IMPORTANT: the RTC only stores whole seconds. It is arbitrary
39 * whether it stores the most close value or the value with partial
40 * seconds truncated. However, it is important that we use it to store
41 * the truncated value. This is because otherwise it is necessary,
42 * in an rtc sync function, to read both xtime.tv_sec and
43 * xtime.tv_nsec. On some processors (i.e. ARM), an atomic read
44 * of >32bits is not possible. So storing the most close value would
45 * slow down the sync API. So here we have the truncated value and
46 * the best guess is to add 0.5s.
49 static void rtc_hctosys(struct rtc_device
*rtc
)
53 struct timespec64 tv64
= {
54 .tv_nsec
= NSEC_PER_SEC
>> 1,
57 err
= rtc_read_time(rtc
, &tm
);
59 dev_err(rtc
->dev
.parent
,
60 "hctosys: unable to read the hardware clock\n");
64 tv64
.tv_sec
= rtc_tm_to_time64(&tm
);
66 #if BITS_PER_LONG == 32
67 if (tv64
.tv_sec
> INT_MAX
) {
73 err
= do_settimeofday64(&tv64
);
75 dev_info(rtc
->dev
.parent
, "setting system clock to %ptR UTC (%lld)\n",
76 &tm
, (long long)tv64
.tv_sec
);
79 rtc_hctosys_ret
= err
;
83 #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_RTC_HCTOSYS_DEVICE)
85 * On suspend(), measure the delta between one RTC and the
86 * system's wall clock; restore it on resume().
89 static struct timespec64 old_rtc
, old_system
, old_delta
;
91 static int rtc_suspend(struct device
*dev
)
93 struct rtc_device
*rtc
= to_rtc_device(dev
);
95 struct timespec64 delta
, delta_delta
;
98 if (timekeeping_rtc_skipsuspend())
101 if (strcmp(dev_name(&rtc
->dev
), CONFIG_RTC_HCTOSYS_DEVICE
) != 0)
104 /* snapshot the current RTC and system time at suspend*/
105 err
= rtc_read_time(rtc
, &tm
);
107 pr_debug("%s: fail to read rtc time\n", dev_name(&rtc
->dev
));
111 ktime_get_real_ts64(&old_system
);
112 old_rtc
.tv_sec
= rtc_tm_to_time64(&tm
);
115 * To avoid drift caused by repeated suspend/resumes,
116 * which each can add ~1 second drift error,
117 * try to compensate so the difference in system time
118 * and rtc time stays close to constant.
120 delta
= timespec64_sub(old_system
, old_rtc
);
121 delta_delta
= timespec64_sub(delta
, old_delta
);
122 if (delta_delta
.tv_sec
< -2 || delta_delta
.tv_sec
>= 2) {
124 * if delta_delta is too large, assume time correction
125 * has occurred and set old_delta to the current delta.
129 /* Otherwise try to adjust old_system to compensate */
130 old_system
= timespec64_sub(old_system
, delta_delta
);
136 static int rtc_resume(struct device
*dev
)
138 struct rtc_device
*rtc
= to_rtc_device(dev
);
140 struct timespec64 new_system
, new_rtc
;
141 struct timespec64 sleep_time
;
144 if (timekeeping_rtc_skipresume())
147 rtc_hctosys_ret
= -ENODEV
;
148 if (strcmp(dev_name(&rtc
->dev
), CONFIG_RTC_HCTOSYS_DEVICE
) != 0)
151 /* snapshot the current rtc and system time at resume */
152 ktime_get_real_ts64(&new_system
);
153 err
= rtc_read_time(rtc
, &tm
);
155 pr_debug("%s: fail to read rtc time\n", dev_name(&rtc
->dev
));
159 new_rtc
.tv_sec
= rtc_tm_to_time64(&tm
);
162 if (new_rtc
.tv_sec
< old_rtc
.tv_sec
) {
163 pr_debug("%s: time travel!\n", dev_name(&rtc
->dev
));
167 /* calculate the RTC time delta (sleep time)*/
168 sleep_time
= timespec64_sub(new_rtc
, old_rtc
);
171 * Since these RTC suspend/resume handlers are not called
172 * at the very end of suspend or the start of resume,
173 * some run-time may pass on either sides of the sleep time
174 * so subtract kernel run-time between rtc_suspend to rtc_resume
175 * to keep things accurate.
177 sleep_time
= timespec64_sub(sleep_time
,
178 timespec64_sub(new_system
, old_system
));
180 if (sleep_time
.tv_sec
>= 0)
181 timekeeping_inject_sleeptime64(&sleep_time
);
186 static SIMPLE_DEV_PM_OPS(rtc_class_dev_pm_ops
, rtc_suspend
, rtc_resume
);
187 #define RTC_CLASS_DEV_PM_OPS (&rtc_class_dev_pm_ops)
189 #define RTC_CLASS_DEV_PM_OPS NULL
192 /* Ensure the caller will set the id before releasing the device */
193 static struct rtc_device
*rtc_allocate_device(void)
195 struct rtc_device
*rtc
;
197 rtc
= kzalloc(sizeof(*rtc
), GFP_KERNEL
);
201 device_initialize(&rtc
->dev
);
203 /* Drivers can revise this default after allocating the device. */
204 rtc
->set_offset_nsec
= NSEC_PER_SEC
/ 2;
207 rtc
->max_user_freq
= 64;
208 rtc
->dev
.class = rtc_class
;
209 rtc
->dev
.groups
= rtc_get_dev_attribute_groups();
210 rtc
->dev
.release
= rtc_device_release
;
212 mutex_init(&rtc
->ops_lock
);
213 spin_lock_init(&rtc
->irq_lock
);
214 init_waitqueue_head(&rtc
->irq_queue
);
216 /* Init timerqueue */
217 timerqueue_init_head(&rtc
->timerqueue
);
218 INIT_WORK(&rtc
->irqwork
, rtc_timer_do_work
);
220 rtc_timer_init(&rtc
->aie_timer
, rtc_aie_update_irq
, rtc
);
222 rtc_timer_init(&rtc
->uie_rtctimer
, rtc_uie_update_irq
, rtc
);
224 hrtimer_init(&rtc
->pie_timer
, CLOCK_MONOTONIC
, HRTIMER_MODE_REL
);
225 rtc
->pie_timer
.function
= rtc_pie_update_irq
;
226 rtc
->pie_enabled
= 0;
231 static int rtc_device_get_id(struct device
*dev
)
233 int of_id
= -1, id
= -1;
236 of_id
= of_alias_get_id(dev
->of_node
, "rtc");
237 else if (dev
->parent
&& dev
->parent
->of_node
)
238 of_id
= of_alias_get_id(dev
->parent
->of_node
, "rtc");
241 id
= ida_simple_get(&rtc_ida
, of_id
, of_id
+ 1, GFP_KERNEL
);
243 dev_warn(dev
, "/aliases ID %d not available\n", of_id
);
247 id
= ida_simple_get(&rtc_ida
, 0, 0, GFP_KERNEL
);
252 static void rtc_device_get_offset(struct rtc_device
*rtc
)
259 * If RTC driver did not implement the range of RTC hardware device,
260 * then we can not expand the RTC range by adding or subtracting one
263 if (rtc
->range_min
== rtc
->range_max
)
266 ret
= device_property_read_u32(rtc
->dev
.parent
, "start-year",
269 rtc
->start_secs
= mktime64(start_year
, 1, 1, 0, 0, 0);
270 rtc
->set_start_time
= true;
274 * If user did not implement the start time for RTC driver, then no
275 * need to expand the RTC range.
277 if (!rtc
->set_start_time
)
280 range_secs
= rtc
->range_max
- rtc
->range_min
+ 1;
283 * If the start_secs is larger than the maximum seconds (rtc->range_max)
284 * supported by RTC hardware or the maximum seconds of new expanded
285 * range (start_secs + rtc->range_max - rtc->range_min) is less than
286 * rtc->range_min, which means the minimum seconds (rtc->range_min) of
287 * RTC hardware will be mapped to start_secs by adding one offset, so
288 * the offset seconds calculation formula should be:
289 * rtc->offset_secs = rtc->start_secs - rtc->range_min;
291 * If the start_secs is larger than the minimum seconds (rtc->range_min)
292 * supported by RTC hardware, then there is one region is overlapped
293 * between the original RTC hardware range and the new expanded range,
294 * and this overlapped region do not need to be mapped into the new
295 * expanded range due to it is valid for RTC device. So the minimum
296 * seconds of RTC hardware (rtc->range_min) should be mapped to
297 * rtc->range_max + 1, then the offset seconds formula should be:
298 * rtc->offset_secs = rtc->range_max - rtc->range_min + 1;
300 * If the start_secs is less than the minimum seconds (rtc->range_min),
301 * which is similar to case 2. So the start_secs should be mapped to
302 * start_secs + rtc->range_max - rtc->range_min + 1, then the
303 * offset seconds formula should be:
304 * rtc->offset_secs = -(rtc->range_max - rtc->range_min + 1);
306 * Otherwise the offset seconds should be 0.
308 if (rtc
->start_secs
> rtc
->range_max
||
309 rtc
->start_secs
+ range_secs
- 1 < rtc
->range_min
)
310 rtc
->offset_secs
= rtc
->start_secs
- rtc
->range_min
;
311 else if (rtc
->start_secs
> rtc
->range_min
)
312 rtc
->offset_secs
= range_secs
;
313 else if (rtc
->start_secs
< rtc
->range_min
)
314 rtc
->offset_secs
= -range_secs
;
316 rtc
->offset_secs
= 0;
320 * rtc_device_unregister - removes the previously registered RTC class device
322 * @rtc: the RTC class device to destroy
324 static void rtc_device_unregister(struct rtc_device
*rtc
)
326 mutex_lock(&rtc
->ops_lock
);
328 * Remove innards of this RTC, then disable it, before
329 * letting any rtc_class_open() users access it again
331 rtc_proc_del_device(rtc
);
332 cdev_device_del(&rtc
->char_dev
, &rtc
->dev
);
334 mutex_unlock(&rtc
->ops_lock
);
335 put_device(&rtc
->dev
);
338 static void devm_rtc_release_device(struct device
*dev
, void *res
)
340 struct rtc_device
*rtc
= *(struct rtc_device
**)res
;
342 rtc_nvmem_unregister(rtc
);
345 rtc_device_unregister(rtc
);
347 put_device(&rtc
->dev
);
350 struct rtc_device
*devm_rtc_allocate_device(struct device
*dev
)
352 struct rtc_device
**ptr
, *rtc
;
355 id
= rtc_device_get_id(dev
);
359 ptr
= devres_alloc(devm_rtc_release_device
, sizeof(*ptr
), GFP_KERNEL
);
365 rtc
= rtc_allocate_device();
372 devres_add(dev
, ptr
);
375 rtc
->dev
.parent
= dev
;
376 dev_set_name(&rtc
->dev
, "rtc%d", id
);
383 ida_simple_remove(&rtc_ida
, id
);
386 EXPORT_SYMBOL_GPL(devm_rtc_allocate_device
);
388 int __rtc_register_device(struct module
*owner
, struct rtc_device
*rtc
)
390 struct rtc_wkalrm alrm
;
394 dev_dbg(&rtc
->dev
, "no ops set\n");
399 rtc_device_get_offset(rtc
);
401 /* Check to see if there is an ALARM already set in hw */
402 err
= __rtc_read_alarm(rtc
, &alrm
);
403 if (!err
&& !rtc_valid_tm(&alrm
.time
))
404 rtc_initialize_alarm(rtc
, &alrm
);
406 rtc_dev_prepare(rtc
);
408 err
= cdev_device_add(&rtc
->char_dev
, &rtc
->dev
);
410 dev_warn(rtc
->dev
.parent
, "failed to add char device %d:%d\n",
411 MAJOR(rtc
->dev
.devt
), rtc
->id
);
413 dev_dbg(rtc
->dev
.parent
, "char device (%d:%d)\n",
414 MAJOR(rtc
->dev
.devt
), rtc
->id
);
416 rtc_proc_add_device(rtc
);
418 rtc
->registered
= true;
419 dev_info(rtc
->dev
.parent
, "registered as %s\n",
420 dev_name(&rtc
->dev
));
422 #ifdef CONFIG_RTC_HCTOSYS_DEVICE
423 if (!strcmp(dev_name(&rtc
->dev
), CONFIG_RTC_HCTOSYS_DEVICE
))
429 EXPORT_SYMBOL_GPL(__rtc_register_device
);
432 * devm_rtc_device_register - resource managed rtc_device_register()
433 * @dev: the device to register
434 * @name: the name of the device (unused)
435 * @ops: the rtc operations structure
436 * @owner: the module owner
438 * @return a struct rtc on success, or an ERR_PTR on error
440 * Managed rtc_device_register(). The rtc_device returned from this function
441 * are automatically freed on driver detach.
442 * This function is deprecated, use devm_rtc_allocate_device and
443 * rtc_register_device instead
445 struct rtc_device
*devm_rtc_device_register(struct device
*dev
,
447 const struct rtc_class_ops
*ops
,
448 struct module
*owner
)
450 struct rtc_device
*rtc
;
453 rtc
= devm_rtc_allocate_device(dev
);
459 err
= __rtc_register_device(owner
, rtc
);
465 EXPORT_SYMBOL_GPL(devm_rtc_device_register
);
467 static int __init
rtc_init(void)
469 rtc_class
= class_create(THIS_MODULE
, "rtc");
470 if (IS_ERR(rtc_class
)) {
471 pr_err("couldn't create class\n");
472 return PTR_ERR(rtc_class
);
474 rtc_class
->pm
= RTC_CLASS_DEV_PM_OPS
;
478 subsys_initcall(rtc_init
);