summaryrefslogtreecommitdiff
path: root/firmware/drivers/rtc/rtc_mc13783.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2017-01-26 21:08:55 -0500
committerMichael Sevakis <jethead71@rockbox.org>2017-11-21 07:52:02 -0500
commitf4c42213062170ddfcc706b3c5ed19f47517c253 (patch)
tree65f8058970e97d939660cf1e39f844a06df66f84 /firmware/drivers/rtc/rtc_mc13783.c
parent12bc24adbf919dc945928b2dcda74d51d33708f7 (diff)
downloadrockbox-f4c42213062170ddfcc706b3c5ed19f47517c253.tar.gz
rockbox-f4c42213062170ddfcc706b3c5ed19f47517c253.zip
Convert i.MX31 and AMS target to use RTC interrupt
Instead of checking ticks, set a sticky dirty flag that indicates that the RTC needs to be read. This gives a timely update and more accurate readout without actually reading the RTC until it changes. The implementation should atomically read the flag and clear it. Setting the flag would typically happen in an RTC tick ISR. Change-Id: I6fd325f22845029a485c502c884812d3676026ea
Diffstat (limited to 'firmware/drivers/rtc/rtc_mc13783.c')
-rw-r--r--firmware/drivers/rtc/rtc_mc13783.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/firmware/drivers/rtc/rtc_mc13783.c b/firmware/drivers/rtc/rtc_mc13783.c
index a1f78f738d..aedf5f6fa5 100644
--- a/firmware/drivers/rtc/rtc_mc13783.c
+++ b/firmware/drivers/rtc/rtc_mc13783.c
@@ -69,6 +69,7 @@ static const unsigned char rtc_registers[RTC_NUM_REGS_RD] =
69 69
70/* was it an alarm that triggered power on ? */ 70/* was it an alarm that triggered power on ? */
71static bool alarm_start = false; 71static bool alarm_start = false;
72static unsigned long rtc_is_dirty = 1; /* force a read right away */
72 73
73static const unsigned short month_table[13] = 74static const unsigned short month_table[13] =
74{ 75{
@@ -96,6 +97,16 @@ static bool read_time_and_day(uint32_t regs[RTC_NUM_REGS_RD])
96 return true; 97 return true;
97} 98}
98 99
100void MC13783_EVENT_CB_1HZ(void)
101{
102 rtc_is_dirty = 1;
103}
104
105bool rtc_mc13783_dirty(void)
106{
107 return bitclr32(&rtc_is_dirty, 1);
108}
109
99/** Public APIs **/ 110/** Public APIs **/
100void rtc_init(void) 111void rtc_init(void)
101{ 112{
@@ -105,6 +116,8 @@ void rtc_init(void)
105 alarm_start = true; 116 alarm_start = true;
106 mc13783_write(MC13783_INTERRUPT_STATUS1, MC13783_TODAI); 117 mc13783_write(MC13783_INTERRUPT_STATUS1, MC13783_TODAI);
107 } 118 }
119
120 mc13783_enable_event(MC13783_INT_ID_1HZ, true);
108} 121}
109 122
110int rtc_read_datetime(struct tm *tm) 123int rtc_read_datetime(struct tm *tm)