13 #include <linux/module.h>
15 #include <linux/rtc.h>
17 #include <linux/slab.h>
25 #define PM8XXX_ALARM_CTRL_OFFSET 0x01
26 #define PM8XXX_RTC_WRITE_OFFSET 0x02
27 #define PM8XXX_RTC_READ_OFFSET 0x06
28 #define PM8XXX_ALARM_RW_OFFSET 0x0A
31 #define PM8xxx_RTC_ENABLE BIT(7)
32 #define PM8xxx_RTC_ALARM_ENABLE BIT(1)
33 #define PM8xxx_RTC_ALARM_CLEAR BIT(0)
35 #define NUM_8_BIT_RTC_REGS 0x4
65 static int pm8xxx_read_wrapper(
struct pm8xxx_rtc *rtc_dd,
u8 *rtc_val,
71 for (i = 0; i <
count; i++) {
72 rc = pm8xxx_readb(parent, base + i, &rtc_val[i]);
82 static int pm8xxx_write_wrapper(
struct pm8xxx_rtc *rtc_dd,
u8 *rtc_val,
88 for (i = 0; i <
count; i++) {
89 rc = pm8xxx_writeb(parent, base + i, rtc_val[i]);
109 unsigned long secs, irq_flags;
116 value[
i] = secs & 0xFF;
120 dev_dbg(dev,
"Seconds value to be written to RTC = %lu\n", secs);
127 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
131 dev_err(dev,
"Write to RTC control register "
141 rc = pm8xxx_write_wrapper(rtc_dd, ®, rtc_dd->
rtc_write_base, 1);
143 dev_err(dev,
"Write to RTC write data register failed\n");
148 rc = pm8xxx_write_wrapper(rtc_dd, value + 1,
151 dev_err(dev,
"Write to RTC write data register failed\n");
156 rc = pm8xxx_write_wrapper(rtc_dd, value, rtc_dd->
rtc_write_base, 1);
158 dev_err(dev,
"Write to RTC write data register failed\n");
167 dev_err(dev,
"Write to RTC control register "
181 static int pm8xxx_rtc_read_time(
struct device *dev,
struct rtc_time *tm)
188 rc = pm8xxx_read_wrapper(rtc_dd, value, rtc_dd->
rtc_read_base,
191 dev_err(dev,
"RTC read data register failed\n");
199 rc = pm8xxx_read_wrapper(rtc_dd, ®, rtc_dd->
rtc_read_base, 1);
201 dev_err(dev,
"RTC read data register failed\n");
206 rc = pm8xxx_read_wrapper(rtc_dd, value,
209 dev_err(dev,
"RTC read data register failed\n");
214 secs = value[0] | (value[1] << 8) | (value[2] << 16) | (value[3] << 24);
220 dev_err(dev,
"Invalid time read from RTC\n");
224 dev_dbg(dev,
"secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n",
235 unsigned long secs, irq_flags;
241 value[
i] = secs & 0xFF;
247 rc = pm8xxx_write_wrapper(rtc_dd, value, rtc_dd->
alarm_rw_base,
250 dev_err(dev,
"Write to RTC ALARM register failed\n");
256 (ctrl_reg & ~PM8xxx_RTC_ALARM_ENABLE);
258 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base, 1);
260 dev_err(dev,
"Write to RTC control register failed\n");
266 dev_dbg(dev,
"Alarm Set for h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
267 alarm->
time.tm_hour, alarm->
time.tm_min,
268 alarm->
time.tm_sec, alarm->
time.tm_mday,
269 alarm->
time.tm_mon, alarm->
time.tm_year);
275 static int pm8xxx_rtc_read_alarm(
struct device *dev,
struct rtc_wkalrm *alarm)
282 rc = pm8xxx_read_wrapper(rtc_dd, value, rtc_dd->
alarm_rw_base,
285 dev_err(dev,
"RTC alarm time read failed\n");
289 secs = value[0] | (value[1] << 8) | (value[2] << 16) | (value[3] << 24);
295 dev_err(dev,
"Invalid alarm time read from RTC\n");
299 dev_dbg(dev,
"Alarm set for - h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
300 alarm->
time.tm_hour, alarm->
time.tm_min,
301 alarm->
time.tm_sec, alarm->
time.tm_mday,
302 alarm->
time.tm_mon, alarm->
time.tm_year);
307 static int pm8xxx_rtc_alarm_irq_enable(
struct device *dev,
unsigned int enable)
310 unsigned long irq_flags;
316 ctrl_reg = (
enable) ? (ctrl_reg | PM8xxx_RTC_ALARM_ENABLE) :
317 (ctrl_reg & ~PM8xxx_RTC_ALARM_ENABLE);
319 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base, 1);
321 dev_err(dev,
"Write to RTC control register failed\n");
333 .read_time = pm8xxx_rtc_read_time,
334 .set_alarm = pm8xxx_rtc_set_alarm,
335 .read_alarm = pm8xxx_rtc_read_alarm,
336 .alarm_irq_enable = pm8xxx_rtc_alarm_irq_enable,
344 unsigned long irq_flags;
352 ctrl_reg &= ~PM8xxx_RTC_ALARM_ENABLE;
354 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base, 1);
359 goto rtc_alarm_handled;
366 rc = pm8xxx_read_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base +
371 goto rtc_alarm_handled;
375 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base +
389 bool rtc_write_enable =
false;
393 dev_get_platdata(&pdev->
dev);
398 rtc_dd = kzalloc(
sizeof(*rtc_dd),
GFP_KERNEL);
399 if (rtc_dd ==
NULL) {
400 dev_err(&pdev->
dev,
"Unable to allocate memory!\n");
409 dev_err(&pdev->
dev,
"Alarm IRQ resource absent!\n");
411 goto fail_rtc_enable;
416 if (!(rtc_resource && rtc_resource->
start)) {
417 dev_err(&pdev->
dev,
"RTC IO resource absent!\n");
419 goto fail_rtc_enable;
432 rc = pm8xxx_read_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base, 1);
434 dev_err(&pdev->
dev,
"RTC control register read failed!\n");
435 goto fail_rtc_enable;
440 rc = pm8xxx_write_wrapper(rtc_dd, &ctrl_reg, rtc_dd->
rtc_base,
443 dev_err(&pdev->
dev,
"Write to RTC control register "
445 goto fail_rtc_enable;
450 if (rtc_write_enable ==
true)
451 pm8xxx_rtc_ops.
set_time = pm8xxx_rtc_set_time;
453 platform_set_drvdata(pdev, rtc_dd);
458 if (IS_ERR(rtc_dd->
rtc)) {
459 dev_err(&pdev->
dev,
"%s: RTC registration failed (%ld)\n",
460 __func__, PTR_ERR(rtc_dd->
rtc));
461 rc = PTR_ERR(rtc_dd->
rtc);
462 goto fail_rtc_enable;
468 "pm8xxx_rtc_alarm", rtc_dd);
470 dev_err(&pdev->
dev,
"Request IRQ failed (%d)\n", rc);
483 platform_set_drvdata(pdev,
NULL);
490 struct pm8xxx_rtc *rtc_dd = platform_get_drvdata(pdev);
495 platform_set_drvdata(pdev,
NULL);
501 #ifdef CONFIG_PM_SLEEP
502 static int pm8xxx_rtc_resume(
struct device *dev)
506 if (device_may_wakeup(dev))
512 static int pm8xxx_rtc_suspend(
struct device *dev)
516 if (device_may_wakeup(dev))
523 static SIMPLE_DEV_PM_OPS(pm8xxx_rtc_pm_ops, pm8xxx_rtc_suspend, pm8xxx_rtc_resume);
526 .probe = pm8xxx_rtc_probe,
531 .pm = &pm8xxx_rtc_pm_ops,