diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/rtc.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/firmware/drivers/rtc.c b/firmware/drivers/rtc.c index 6458092348..ecfd2ac6ba 100644 --- a/firmware/drivers/rtc.c +++ b/firmware/drivers/rtc.c | |||
@@ -61,24 +61,17 @@ int rtc_write_datetime(unsigned char* buf) | |||
61 | return 1; | 61 | return 1; |
62 | } | 62 | } |
63 | #elif CONFIG_RTC == RTC_PCF50606 | 63 | #elif CONFIG_RTC == RTC_PCF50606 |
64 | static int last_tick; | ||
65 | static char rtc_buf[7]; | ||
66 | void rtc_init(void) | 64 | void rtc_init(void) |
67 | { | 65 | { |
68 | last_tick = 0; | ||
69 | } | 66 | } |
70 | 67 | ||
71 | int rtc_read_datetime(unsigned char* buf) { | 68 | int rtc_read_datetime(unsigned char* buf) { |
72 | int rc; | 69 | int rc; |
73 | if (last_tick + HZ/2 < current_tick) { | 70 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); |
74 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | 71 | |
75 | last_tick = current_tick; | 72 | rc = pcf50606_read_multiple(0x0a, buf, 7); |
76 | rc = pcf50606_read_multiple(0x0a, rtc_buf, 7); | 73 | |
77 | set_irq_level(oldlevel); | 74 | set_irq_level(oldlevel); |
78 | } else { | ||
79 | rc = 7; | ||
80 | } | ||
81 | memcpy(buf, rtc_buf, 7); | ||
82 | return rc; | 75 | return rc; |
83 | } | 76 | } |
84 | 77 | ||