21 #include <linux/kernel.h>
22 #include <linux/errno.h>
24 #include <linux/module.h>
25 #include <linux/types.h>
26 #include <linux/rtc.h>
60 static const u8 twl4030_rtc_reg_map[] = {
83 static const u8 twl6030_rtc_reg_map[] = {
108 #define BIT_RTC_CTRL_REG_STOP_RTC_M 0x01
109 #define BIT_RTC_CTRL_REG_ROUND_30S_M 0x02
110 #define BIT_RTC_CTRL_REG_AUTO_COMP_M 0x04
111 #define BIT_RTC_CTRL_REG_MODE_12_24_M 0x08
112 #define BIT_RTC_CTRL_REG_TEST_MODE_M 0x10
113 #define BIT_RTC_CTRL_REG_SET_32_COUNTER_M 0x20
114 #define BIT_RTC_CTRL_REG_GET_TIME_M 0x40
115 #define BIT_RTC_CTRL_REG_RTC_V_OPT 0x80
118 #define BIT_RTC_STATUS_REG_RUN_M 0x02
119 #define BIT_RTC_STATUS_REG_1S_EVENT_M 0x04
120 #define BIT_RTC_STATUS_REG_1M_EVENT_M 0x08
121 #define BIT_RTC_STATUS_REG_1H_EVENT_M 0x10
122 #define BIT_RTC_STATUS_REG_1D_EVENT_M 0x20
123 #define BIT_RTC_STATUS_REG_ALARM_M 0x40
124 #define BIT_RTC_STATUS_REG_POWER_UP_M 0x80
127 #define BIT_RTC_INTERRUPTS_REG_EVERY_M 0x03
128 #define BIT_RTC_INTERRUPTS_REG_IT_TIMER_M 0x04
129 #define BIT_RTC_INTERRUPTS_REG_IT_ALARM_M 0x08
133 #define ALL_TIME_REGS 6
136 static u8 *rtc_reg_map;
147 pr_err(
"twl_rtc: Could not read TWL"
148 "register %X - error %d\n", reg, ret);
161 pr_err(
"twl_rtc: Could not write TWL"
162 "register %X - error %d\n", reg, ret);
170 static unsigned char rtc_irq_bits;
175 static int set_rtc_irq_bit(
unsigned char bit)
181 if (rtc_irq_bits & bit)
184 val = rtc_irq_bits |
bit;
196 static int mask_rtc_irq_bit(
unsigned char bit)
202 if (!(rtc_irq_bits & bit))
205 val = rtc_irq_bits & ~bit;
243 dev_err(dev,
"%s: reading CTRL_REG, error %d\n", __func__, ret);
247 if (twl_class_is_6030()) {
249 save_control &= ~BIT_RTC_CTRL_REG_GET_TIME_M;
252 dev_err(dev,
"%s clr GET_TIME, error %d\n",
263 if (twl_class_is_6030())
268 dev_err(dev,
"%s: writing CTRL_REG, error %d\n", __func__, ret);
276 dev_err(dev,
"%s: reading data, error %d\n", __func__, ret);
281 if (twl_class_is_6030()) {
284 dev_err(dev,
"%s: restore CTRL_REG, error %d\n",
300 static int twl_rtc_set_time(
struct device *dev,
struct rtc_time *tm)
302 unsigned char save_control;
327 dev_err(dev,
"rtc_set_time error %d\n", ret);
350 dev_err(dev,
"rtc_read_alarm error %d\n", ret);
374 ret = twl_rtc_alarm_irq_enable(dev, 0);
389 dev_err(dev,
"rtc_set_alarm error %d\n", ret);
394 ret = twl_rtc_alarm_irq_enable(dev, 1);
420 res = twl_rtc_write_u8(BIT_RTC_STATUS_REG_ALARM_M,
425 if (twl_class_is_4030()) {
452 .read_time = twl_rtc_read_time,
453 .set_time = twl_rtc_set_time,
454 .read_alarm = twl_rtc_read_alarm,
455 .set_alarm = twl_rtc_set_alarm,
456 .alarm_irq_enable = twl_rtc_alarm_irq_enable,
476 dev_warn(&pdev->
dev,
"Power up reset detected.\n");
478 if (rd_reg & BIT_RTC_STATUS_REG_ALARM_M)
479 dev_warn(&pdev->
dev,
"Pending Alarm interrupt detected.\n");
486 if (twl_class_is_6030()) {
501 dev_warn(&pdev->
dev,
"unable to disable interrupt\n");
512 dev_err(&pdev->
dev,
"can't register RTC device, err %ld\n",
519 dev_name(&rtc->
dev), rtc);
525 platform_set_drvdata(pdev, rtc);
541 struct rtc_device *rtc = platform_get_drvdata(pdev);
546 if (twl_class_is_6030()) {
557 platform_set_drvdata(pdev,
NULL);
570 static unsigned char irqstat;
574 irqstat = rtc_irq_bits;
582 set_rtc_irq_bit(irqstat);
587 #define twl_rtc_suspend NULL
588 #define twl_rtc_resume NULL
592 {.compatible =
"ti,twl4030-rtc", },
599 .probe = twl_rtc_probe,
601 .shutdown = twl_rtc_shutdown,
607 .of_match_table = twl_rtc_of_match,
611 static int __init twl_rtc_init(
void)
613 if (twl_class_is_4030())
614 rtc_reg_map = (
u8 *) twl4030_rtc_reg_map;
616 rtc_reg_map = (
u8 *) twl6030_rtc_reg_map;
622 static void __exit twl_rtc_exit(
void)