Lines Matching +full:start +full:- +full:year

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rtc-mrst.c: Driver for Moorestown virtual RTC
15 * This driver is based upon drivers/rtc/rtc-cmos.c
37 #include <asm/intel-mid.h>
72 * rtc_time's year contains the increment over 1900, but vRTC's YEAR
74 * driver chose to use 1972 (1970 is UNIX time start point) as the base,
78 * make it consistent in leap year setting for both vrtc and low-level
80 * 1960, for a device's first use, its YEAR register is 0 and the system
81 * year will be parsed as 1960 which is not a valid UNIX time and will
92 time->tm_sec = vrtc_cmos_read(RTC_SECONDS); in mrst_read_time()
93 time->tm_min = vrtc_cmos_read(RTC_MINUTES); in mrst_read_time()
94 time->tm_hour = vrtc_cmos_read(RTC_HOURS); in mrst_read_time()
95 time->tm_mday = vrtc_cmos_read(RTC_DAY_OF_MONTH); in mrst_read_time()
96 time->tm_mon = vrtc_cmos_read(RTC_MONTH); in mrst_read_time()
97 time->tm_year = vrtc_cmos_read(RTC_YEAR); in mrst_read_time()
101 time->tm_year += 72; in mrst_read_time()
102 time->tm_mon--; in mrst_read_time()
113 yrs = time->tm_year; in mrst_set_time()
114 mon = time->tm_mon + 1; /* tm_mon starts at zero */ in mrst_set_time()
115 day = time->tm_mday; in mrst_set_time()
116 hrs = time->tm_hour; in mrst_set_time()
117 min = time->tm_min; in mrst_set_time()
118 sec = time->tm_sec; in mrst_set_time()
121 return -EINVAL; in mrst_set_time()
122 yrs -= 72; in mrst_set_time()
144 if (mrst->irq <= 0) in mrst_read_alarm()
145 return -EIO; in mrst_read_alarm()
149 t->time.tm_sec = vrtc_cmos_read(RTC_SECONDS_ALARM); in mrst_read_alarm()
150 t->time.tm_min = vrtc_cmos_read(RTC_MINUTES_ALARM); in mrst_read_alarm()
151 t->time.tm_hour = vrtc_cmos_read(RTC_HOURS_ALARM); in mrst_read_alarm()
156 t->enabled = !!(rtc_control & RTC_AIE); in mrst_read_alarm()
157 t->pending = 0; in mrst_read_alarm()
173 rtc_update_irq(mrst->rtc, 1, rtc_intr); in mrst_checkintr()
209 if (!mrst->irq) in mrst_set_alarm()
210 return -EIO; in mrst_set_alarm()
212 hrs = t->time.tm_hour; in mrst_set_alarm()
213 min = t->time.tm_min; in mrst_set_alarm()
214 sec = t->time.tm_sec; in mrst_set_alarm()
232 if (t->enabled) in mrst_set_alarm()
321 return -EBUSY; in vrtc_mrst_do_probe()
324 return -ENODEV; in vrtc_mrst_do_probe()
326 iomem = devm_request_mem_region(dev, iomem->start, resource_size(iomem), in vrtc_mrst_do_probe()
330 return -EBUSY; in vrtc_mrst_do_probe()
341 mrst_rtc.rtc->ops = &mrst_rtc_ops; in vrtc_mrst_do_probe()
343 rename_region(iomem, dev_name(&mrst_rtc.rtc->dev)); in vrtc_mrst_do_probe()
351 dev_dbg(dev, "TODO: support more than 24-hr BCD mode\n"); in vrtc_mrst_do_probe()
355 0, dev_name(&mrst_rtc.rtc->dev), in vrtc_mrst_do_probe()
373 dev_err(dev, "rtc-mrst: unable to initialise\n"); in vrtc_mrst_do_probe()
390 mrst->rtc = NULL; in rtc_mrst_do_remove()
391 mrst->dev = NULL; in rtc_mrst_do_remove()
402 mrst->suspend_ctrl = tmp = vrtc_cmos_read(RTC_CONTROL); in mrst_suspend()
418 mrst->enabled_wake = 1; in mrst_suspend()
419 enable_irq_wake(mrst->irq); in mrst_suspend()
422 dev_dbg(&mrst_rtc.rtc->dev, "suspend%s, ctrl %02x\n", in mrst_suspend()
440 unsigned char tmp = mrst->suspend_ctrl; in mrst_resume()
442 /* Re-enable any irqs previously active */ in mrst_resume()
446 if (mrst->enabled_wake) { in mrst_resume()
447 disable_irq_wake(mrst->irq); in mrst_resume()
448 mrst->enabled_wake = 0; in mrst_resume()
460 rtc_update_irq(mrst->rtc, 1, mask); in mrst_resume()
466 dev_dbg(&mrst_rtc.rtc->dev, "resume, ctrl %02x\n", tmp); in mrst_resume()
479 return -ENOSYS; in mrst_poweroff()
486 return vrtc_mrst_do_probe(&pdev->dev, in vrtc_mrst_platform_probe()
493 rtc_mrst_do_remove(&pdev->dev); in vrtc_mrst_platform_remove()
499 if (system_state == SYSTEM_POWER_OFF && !mrst_poweroff(&pdev->dev)) in vrtc_mrst_platform_shutdown()