[PATCH] rtc-s3c.c: fix time setting checks

From: Ben Dooks
Date: Tue Aug 15 2006 - 16:50:48 EST


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@xxxxxxxxx>

diff -urpN -X ../dontdiff linux-2.6.18-rc4-rtc1/drivers/rtc/rtc-s3c.c linux-2.6.18-rc4-rtc2/drivers/rtc/rtc-s3c.c
--- linux-2.6.18-rc4-rtc1/drivers/rtc/rtc-s3c.c 2006-08-11 22:13:21.000000000 +0100
+++ linux-2.6.18-rc4-rtc2/drivers/rtc/rtc-s3c.c 2006-08-15 21:50:23.000000000 +0100
@@ -153,24 +153,25 @@ static int s3c_rtc_gettime(struct device
static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
{
void __iomem *base = s3c_rtc_base;
+ int year = tm->tm_year - 100;

- /* the rtc gets round the y2k problem by just not supporting it */
+ pr_debug("set time %02d.%02d.%02d %02d/%02d/%02d\n",
+ tm->tm_year, tm->tm_mon, tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec);
+
+ /* we get around y2k by simply not supporting it */

- if (tm->tm_year > 100) {
+ if (year < 0 || year >= 100) {
dev_err(dev, "rtc only supports 100 years\n");
return -EINVAL;
}

- pr_debug("set time %02d.%02d.%02d %02d/%02d/%02d\n",
- tm->tm_year, tm->tm_mon, tm->tm_mday,
- tm->tm_hour, tm->tm_min, tm->tm_sec);
-
writeb(BIN2BCD(tm->tm_sec), base + S3C2410_RTCSEC);
writeb(BIN2BCD(tm->tm_min), base + S3C2410_RTCMIN);
writeb(BIN2BCD(tm->tm_hour), base + S3C2410_RTCHOUR);
writeb(BIN2BCD(tm->tm_mday), base + S3C2410_RTCDATE);
writeb(BIN2BCD(tm->tm_mon + 1), base + S3C2410_RTCMON);
- writeb(BIN2BCD(tm->tm_year - 100), base + S3C2410_RTCYEAR);
+ writeb(BIN2BCD(year), base + S3C2410_RTCYEAR);

return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/