[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 static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 154 { 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 - } 163 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_min), base + S3C2410_RTCMIN); 170 writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR); 171 writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE); 172 writeb(BIN2BCD(tm->tm_mon + 1), base + S3C2410_RTCMON); 173 - writeb(BIN2BCD(tm->tm_year - 100), base + S3C2410_RTCYEAR); 174 175 return 0; 176 }
··· 153 static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 154 { 155 void __iomem *base = s3c_rtc_base; 156 + int year = tm->tm_year - 100; 157 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 */ 163 + 164 + if (year < 0 || year >= 100) { 165 + dev_err(dev, "rtc only supports 100 years\n"); 166 + return -EINVAL; 167 + } 168 169 writeb(BIN2BCD(tm->tm_sec), base + S3C2410_RTCSEC); 170 writeb(BIN2BCD(tm->tm_min), base + S3C2410_RTCMIN); 171 writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR); 172 writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE); 173 writeb(BIN2BCD(tm->tm_mon + 1), base + S3C2410_RTCMON); 174 + writeb(BIN2BCD(year), base + S3C2410_RTCYEAR); 175 176 return 0; 177 }