|
@@ -22,48 +22,57 @@
|
|
|
* the best guess is to add 0.5s.
|
|
|
*/
|
|
|
|
|
|
+int rtc_hctosys_ret = -ENODEV;
|
|
|
+
|
|
|
static int __init rtc_hctosys(void)
|
|
|
{
|
|
|
- int err;
|
|
|
+ int err = -ENODEV;
|
|
|
struct rtc_time tm;
|
|
|
+ struct timespec tv = {
|
|
|
+ .tv_nsec = NSEC_PER_SEC >> 1,
|
|
|
+ };
|
|
|
struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
|
|
|
|
|
|
if (rtc == NULL) {
|
|
|
- printk("%s: unable to open rtc device (%s)\n",
|
|
|
+ pr_err("%s: unable to open rtc device (%s)\n",
|
|
|
__FILE__, CONFIG_RTC_HCTOSYS_DEVICE);
|
|
|
- return -ENODEV;
|
|
|
+ goto err_open;
|
|
|
}
|
|
|
|
|
|
err = rtc_read_time(rtc, &tm);
|
|
|
- if (err == 0) {
|
|
|
- err = rtc_valid_tm(&tm);
|
|
|
- if (err == 0) {
|
|
|
- struct timespec tv;
|
|
|
+ if (err) {
|
|
|
+ dev_err(rtc->dev.parent,
|
|
|
+ "hctosys: unable to read the hardware clock\n");
|
|
|
+ goto err_read;
|
|
|
|
|
|
- tv.tv_nsec = NSEC_PER_SEC >> 1;
|
|
|
+ }
|
|
|
|
|
|
- rtc_tm_to_time(&tm, &tv.tv_sec);
|
|
|
+ err = rtc_valid_tm(&tm);
|
|
|
+ if (err) {
|
|
|
+ dev_err(rtc->dev.parent,
|
|
|
+ "hctosys: invalid date/time\n");
|
|
|
+ goto err_invalid;
|
|
|
+ }
|
|
|
|
|
|
- do_settimeofday(&tv);
|
|
|
+ rtc_tm_to_time(&tm, &tv.tv_sec);
|
|
|
|
|
|
- dev_info(rtc->dev.parent,
|
|
|
- "setting system clock to "
|
|
|
- "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n",
|
|
|
- tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
|
|
- tm.tm_hour, tm.tm_min, tm.tm_sec,
|
|
|
- (unsigned int) tv.tv_sec);
|
|
|
- }
|
|
|
- else
|
|
|
- dev_err(rtc->dev.parent,
|
|
|
- "hctosys: invalid date/time\n");
|
|
|
- }
|
|
|
- else
|
|
|
- dev_err(rtc->dev.parent,
|
|
|
- "hctosys: unable to read the hardware clock\n");
|
|
|
+ do_settimeofday(&tv);
|
|
|
|
|
|
+ dev_info(rtc->dev.parent,
|
|
|
+ "setting system clock to "
|
|
|
+ "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n",
|
|
|
+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
|
|
|
+ tm.tm_hour, tm.tm_min, tm.tm_sec,
|
|
|
+ (unsigned int) tv.tv_sec);
|
|
|
+
|
|
|
+err_invalid:
|
|
|
+err_read:
|
|
|
rtc_class_close(rtc);
|
|
|
|
|
|
- return 0;
|
|
|
+err_open:
|
|
|
+ rtc_hctosys_ret = err;
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
late_initcall(rtc_hctosys);
|