diff options
Diffstat (limited to 'firmware/drivers/rtc/rtc_jz4740.c')
-rw-r--r-- | firmware/drivers/rtc/rtc_jz4740.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/firmware/drivers/rtc/rtc_jz4740.c b/firmware/drivers/rtc/rtc_jz4740.c index 479e3591db..a73f300aa8 100644 --- a/firmware/drivers/rtc/rtc_jz4740.c +++ b/firmware/drivers/rtc/rtc_jz4740.c | |||
@@ -116,11 +116,10 @@ static void jz_gettime(unsigned int rtc, int *year, int *mon, int *day, | |||
116 | *year += 2000; | 116 | *year += 2000; |
117 | } | 117 | } |
118 | 118 | ||
119 | int rtc_read_datetime(unsigned char* buf) | 119 | int rtc_read_datetime(struct tm *tm) |
120 | { | 120 | { |
121 | struct tm rtc_tm; | ||
122 | unsigned int sec,mon,mday,wday,year,hour,min; | 121 | unsigned int sec,mon,mday,wday,year,hour,min; |
123 | 122 | ||
124 | /* | 123 | /* |
125 | * Only the values that we read from the RTC are set. We leave | 124 | * Only the values that we read from the RTC are set. We leave |
126 | * tm_wday, tm_yday and tm_isdst untouched. Even though the | 125 | * tm_wday, tm_yday and tm_isdst untouched. Even though the |
@@ -131,37 +130,32 @@ int rtc_read_datetime(unsigned char* buf) | |||
131 | 130 | ||
132 | year -= 2000; | 131 | year -= 2000; |
133 | 132 | ||
134 | rtc_tm.tm_sec = sec; | 133 | tm->tm_sec = sec; |
135 | rtc_tm.tm_min = min; | 134 | tm->tm_min = min; |
136 | rtc_tm.tm_hour = hour; | 135 | tm->tm_hour = hour; |
137 | rtc_tm.tm_mday = mday; | 136 | tm->tm_mday = mday; |
138 | rtc_tm.tm_wday = wday; | 137 | tm->tm_wday = wday; |
139 | /* Don't use centry, but start from year 1970 */ | 138 | /* Don't use centry, but start from year 1970 */ |
140 | rtc_tm.tm_mon = mon; | 139 | tm->tm_mon = mon; |
141 | if (year <= 69) | 140 | if (year <= 69) |
142 | year += 100; | 141 | year += 100; |
143 | rtc_tm.tm_year = year; | 142 | tm->tm_year = year; |
144 | 143 | ||
145 | rtc_tm.tm_yday = 0; /* Not implemented for now */ | ||
146 | rtc_tm.tm_isdst = -1; /* Not implemented for now */ | ||
147 | |||
148 | (*((struct tm*)buf)) = rtc_tm; | ||
149 | return 1; | 144 | return 1; |
150 | } | 145 | } |
151 | 146 | ||
152 | int rtc_write_datetime(unsigned char* buf) | 147 | int rtc_write_datetime(const struct tm *tm) |
153 | { | 148 | { |
154 | struct tm *rtc_tm = (struct tm*)buf; | ||
155 | unsigned int year, lval; | 149 | unsigned int year, lval; |
156 | 150 | ||
157 | year = rtc_tm->tm_year; | 151 | year = tm->tm_year; |
158 | /* Don't use centry, but start from year 1970 */ | 152 | /* Don't use centry, but start from year 1970 */ |
159 | if (year > 69) | 153 | if (year > 69) |
160 | year -= 100; | 154 | year -= 100; |
161 | year += 2000; | 155 | year += 2000; |
162 | 156 | ||
163 | lval = jz_mktime(year, rtc_tm->tm_mon, rtc_tm->tm_mday, rtc_tm->tm_hour, | 157 | lval = jz_mktime(year, tm->tm_mon, tm->tm_mday, tm->tm_hour, |
164 | rtc_tm->tm_min, rtc_tm->tm_sec); | 158 | tm->tm_min, tm->tm_sec); |
165 | 159 | ||
166 | __cpm_start_rtc(); | 160 | __cpm_start_rtc(); |
167 | udelay(100); | 161 | udelay(100); |