[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>

authored by Ben Dooks and committed by Linus Torvalds 641741e0 b6b5bce3

+9 -8
+9 -8
drivers/rtc/rtc-s3c.c
··· 153 153 static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 154 154 { 155 155 void __iomem *base = s3c_rtc_base; 156 - 157 - /* the rtc gets round the y2k problem by just not supporting it */ 158 - 159 - if (tm->tm_year > 100) { 160 - dev_err(dev, "rtc only supports 100 years\n"); 161 - return -EINVAL; 162 - } 156 + int year = tm->tm_year - 100; 163 157 164 158 pr_debug("set time %02d.%02d.%02d %02d/%02d/%02d\n", 165 159 tm->tm_year, tm->tm_mon, tm->tm_mday, 166 160 tm->tm_hour, tm->tm_min, tm->tm_sec); 161 + 162 + /* we get around y2k by simply not supporting it */ 163 + 164 + if (year < 0 || year >= 100) { 165 + dev_err(dev, "rtc only supports 100 years\n"); 166 + return -EINVAL; 167 + } 167 168 168 169 writeb(BIN2BCD(tm->tm_sec), base + S3C2410_RTCSEC); 169 170 writeb(BIN2BCD(tm->tm_min), base + S3C2410_RTCMIN); 170 171 writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR); 171 172 writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE); 172 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 176 return 0; 176 177 }