diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-03-19 10:10:44 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-03-20 18:57:30 +0900 |
commit | edf22477dab5ff3be612af56ee4300ca63e11d06 (patch) | |
tree | d22c64a0478f9f304b720f8be74245edad1bee55 /drivers/rtc | |
parent | 9cd88b90a6008b0d744187fab80ade4c81c6536f (diff) | |
download | kernel_samsung_crespo-edf22477dab5ff3be612af56ee4300ca63e11d06.zip kernel_samsung_crespo-edf22477dab5ff3be612af56ee4300ca63e11d06.tar.gz kernel_samsung_crespo-edf22477dab5ff3be612af56ee4300ca63e11d06.tar.bz2 |
sh: sh-rtc invalid time rework
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>
Diffstat (limited to 'drivers/rtc')
-rw-r--r-- | drivers/rtc/rtc-sh.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index 21e7435..9ab660c 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c @@ -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: |