]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
sh: sh-rtc invalid time rework
authorMagnus Damm <damm@igel.co.jp>
Thu, 19 Mar 2009 10:10:44 +0000 (10:10 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 20 Mar 2009 09:57:30 +0000 (18:57 +0900)
This patch modifies invalid time handling in the
SuperH RTC driver. Instead of zeroing the returned
value at read-out time we just return an error code
and reset invalid values during probe.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
drivers/rtc/rtc-sh.c

index 21e7435daecb16cb80f5c74cbbb64fd430cf6b01..9ab660c28feebdd7f008ea38b306ef77ca381654 100644 (file)
@@ -431,12 +431,7 @@ static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm)
                tm->tm_sec, tm->tm_min, tm->tm_hour,
                tm->tm_mday, tm->tm_mon + 1, tm->tm_year, tm->tm_wday);
 
-       if (rtc_valid_tm(tm) < 0) {
-               dev_err(dev, "invalid date\n");
-               rtc_time_to_tm(0, tm);
-       }
-
-       return 0;
+       return rtc_valid_tm(tm);
 }
 
 static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -641,6 +636,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
 {
        struct sh_rtc *rtc;
        struct resource *res;
+       struct rtc_time r;
        int ret;
 
        rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL);
@@ -752,6 +748,13 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev)
        sh_rtc_setpie(&pdev->dev, 0);
        sh_rtc_setaie(&pdev->dev, 0);
        sh_rtc_setcie(&pdev->dev, 0);
+
+       /* reset rtc to epoch 0 if time is invalid */
+       if (rtc_read_time(rtc->rtc_dev, &r) < 0) {
+               rtc_time_to_tm(0, &r);
+               rtc_set_time(rtc->rtc_dev, &r);
+       }
+
        return 0;
 
 err_unmap: