From patchwork Tue Sep 7 05:29:40 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [4/5] rtc: rtc-s3c: Fix on RTC initialization method Date: Mon, 06 Sep 2010 19:29:40 -0000 From: Kukjin Kim X-Patchwork-Id: 63971 Message-Id: <1283837381-9575-5-git-send-email-kgene.kim@samsung.com> To: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, rtc-linux@googlegroups.com Cc: ben-linux@fluff.org, p_gortmaker@yahoo.com, a.zummo@towertech.it, Changhwan Youn , Kukjin Kim , Wan ZongShun From: Changhwan Youn This patch changes RTC initialization method on probe() as per Wan ZongShun's suggestion. The 'rtc_valid_tm(tm)' can check whether RTC BCD is valid or not. And should be changed the method of check because previous method cannot validate RTC BCD registers properly. Signed-off-by: Changhwan Youn Signed-off-by: Kukjin Kim Cc: Ben Dooks Cc: Wan ZongShun --- drivers/rtc/rtc-s3c.c | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index c078548..7f15073 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -458,8 +458,8 @@ static int __devexit s3c_rtc_remove(struct platform_device *dev) static int __devinit s3c_rtc_probe(struct platform_device *pdev) { struct rtc_device *rtc; + struct rtc_time rtc_tm; struct resource *res; - unsigned int tmp, i; int ret; pr_debug("%s: probe=%p\n", __func__, pdev); @@ -540,11 +540,17 @@ static int __devinit s3c_rtc_probe(struct platform_device *pdev) /* Check RTC Time */ - for (i = S3C2410_RTCSEC; i <= S3C2410_RTCYEAR; i += 0x4) { - tmp = readb(s3c_rtc_base + i); + s3c_rtc_gettime(NULL, &rtc_tm); - if ((tmp & 0xf) > 0x9 || ((tmp >> 4) & 0xf) > 0x9) - writeb(0, s3c_rtc_base + i); + if (rtc_valid_tm(&rtc_tm)) { + rtc_tm.tm_year = 100; + rtc_tm.tm_mon = 0; + rtc_tm.tm_mday = 1; + rtc_tm.tm_hour = 0; + rtc_tm.tm_min = 0; + rtc_tm.tm_sec = 0; + + s3c_rtc_settime(NULL, &rtc_tm); } if (s3c_rtc_cpu_type == TYPE_S3C64XX)