summaryrefslogtreecommitdiff
path: root/firmware/drivers/rtc/rtc_jz4740.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/rtc/rtc_jz4740.c')
-rw-r--r--firmware/drivers/rtc/rtc_jz4740.c34
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
119int rtc_read_datetime(unsigned char* buf) 119int 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
152int rtc_write_datetime(unsigned char* buf) 147int 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);