aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-s3c.c
diff options
context:
space:
mode:
authorBen Dooks <ben-linux@fluff.org>2006-08-27 04:23:27 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-08-27 14:01:28 -0400
commit641741e010b615bae417c876a21d17dbd616241f (patch)
tree236c363b0b4924052c0fd4045e68b54c0e7a79a1 /drivers/rtc/rtc-s3c.c
parentb6b5bce3571e496504a89ee575d32101e0a98b93 (diff)
[PATCH] rtc-s3c.c: fix time setting checks
Fix the year check on setting the time with the S3C24XX RTC driver. Also move the debug to before the set to see what is going on if it does fail. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/rtc/rtc-s3c.c')
-rw-r--r--drivers/rtc/rtc-s3c.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index aacbfea98678..2c7de79c83b9 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -153,24 +153,25 @@ static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
153static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 153static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
154{ 154{
155 void __iomem *base = s3c_rtc_base; 155 void __iomem *base = s3c_rtc_base;
156 int year = tm->tm_year - 100;
156 157
157 /* the rtc gets round the y2k problem by just not supporting it */ 158 pr_debug("set time %02d.%02d.%02d %02d/%02d/%02d\n",
159 tm->tm_year, tm->tm_mon, tm->tm_mday,
160 tm->tm_hour, tm->tm_min, tm->tm_sec);
161
162 /* we get around y2k by simply not supporting it */
158 163
159 if (tm->tm_year > 100) { 164 if (year < 0 || year >= 100) {
160 dev_err(dev, "rtc only supports 100 years\n"); 165 dev_err(dev, "rtc only supports 100 years\n");
161 return -EINVAL; 166 return -EINVAL;
162 } 167 }
163 168
164 pr_debug("set time %02d.%02d.%02d %02d/%02d/%02d\n",
165 tm->tm_year, tm->tm_mon, tm->tm_mday,
166 tm->tm_hour, tm->tm_min, tm->tm_sec);
167
168 writeb(BIN2BCD(tm->tm_sec), base + S3C2410_RTCSEC); 169 writeb(BIN2BCD(tm->tm_sec), base + S3C2410_RTCSEC);
169 writeb(BIN2BCD(tm->tm_min), base + S3C2410_RTCMIN); 170 writeb(BIN2BCD(tm->tm_min), base + S3C2410_RTCMIN);
170 writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR); 171 writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR);
171 writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE); 172 writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE);
172 writeb(BIN2BCD(tm->tm_mon + 1), base + S3C2410_RTCMON); 173 writeb(BIN2BCD(tm->tm_mon + 1), base + S3C2410_RTCMON);
173 writeb(BIN2BCD(tm->tm_year - 100), base + S3C2410_RTCYEAR); 174 writeb(BIN2BCD(year), base + S3C2410_RTCYEAR);
174 175
175 return 0; 176 return 0;
176} 177}