diff options
-rw-r--r-- | firmware/drivers/rtc/rtc_as3514.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/firmware/drivers/rtc/rtc_as3514.c b/firmware/drivers/rtc/rtc_as3514.c index 878f204a4e..d20e021ffb 100644 --- a/firmware/drivers/rtc/rtc_as3514.c +++ b/firmware/drivers/rtc/rtc_as3514.c | |||
@@ -19,11 +19,18 @@ | |||
19 | * | 19 | * |
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | #include <stdbool.h> | 21 | #include <stdbool.h> |
22 | #include "config.h" | ||
22 | #include "rtc.h" | 23 | #include "rtc.h" |
23 | #include "i2c-pp.h" | ||
24 | #include "as3514.h" | 24 | #include "as3514.h" |
25 | #include "ascodec.h" | 25 | #include "ascodec.h" |
26 | 26 | ||
27 | /* AMS Sansas start counting from Jan 1st 1970 instead of 1980 */ | ||
28 | #if (CONFIG_CPU==AS3525) | ||
29 | #define SECS_ADJUST 315532800 /* seconds between 1970-1-1 and 1980-1-1 */ | ||
30 | #else | ||
31 | #define SECS_ADJUST 0 | ||
32 | #endif | ||
33 | |||
27 | #define MINUTE_SECONDS 60 | 34 | #define MINUTE_SECONDS 60 |
28 | #define HOUR_SECONDS 3600 | 35 | #define HOUR_SECONDS 3600 |
29 | #define DAY_SECONDS 86400 | 36 | #define DAY_SECONDS 86400 |
@@ -61,6 +68,7 @@ int rtc_read_datetime(unsigned char* buf) | |||
61 | tmp[i] = ascodec_read(AS3514_RTC_0 + i); | 68 | tmp[i] = ascodec_read(AS3514_RTC_0 + i); |
62 | } | 69 | } |
63 | seconds = tmp[0] + (tmp[1]<<8) + (tmp[2]<<16) + (tmp[3]<<24); | 70 | seconds = tmp[0] + (tmp[1]<<8) + (tmp[2]<<16) + (tmp[3]<<24); |
71 | seconds -= SECS_ADJUST; | ||
64 | 72 | ||
65 | /* Convert seconds since Jan-1-1980 to format compatible with | 73 | /* Convert seconds since Jan-1-1980 to format compatible with |
66 | * get_time() from firmware/common/timefuncs.c */ | 74 | * get_time() from firmware/common/timefuncs.c */ |
@@ -160,6 +168,7 @@ int rtc_write_datetime(unsigned char* buf) | |||
160 | + (buf[4]-1)*DAY_SECONDS | 168 | + (buf[4]-1)*DAY_SECONDS |
161 | + month_days*DAY_SECONDS | 169 | + month_days*DAY_SECONDS |
162 | + year_days*DAY_SECONDS; | 170 | + year_days*DAY_SECONDS; |
171 | seconds += SECS_ADJUST; | ||
163 | 172 | ||
164 | /* Send data to RTC */ | 173 | /* Send data to RTC */ |
165 | for (i=0;i<4;i++){ | 174 | for (i=0;i<4;i++){ |