]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
drivers/rtc/rtc-mxc.c: fix setting time for MX1 SoC
authorYauhen Kharuzhy <jekhor@gmail.com>
Thu, 8 Dec 2011 04:42:28 +0000 (15:42 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Dec 2011 06:43:23 +0000 (17:43 +1100)
There is no way to track year in the i.MX1 RTC: Days Counter register is
9-bit wide only.  Attempt to save date after 1970-01-01 plus 512 days
causes endless loop in mxc_rtc_set_mmss().  Fix this by resetting year to
1970.

Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com>
Cc: Daniel Mack <daniel@caiaq.de>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/rtc/rtc-mxc.c

index 39e41fbdf08ba6de6259347feb0cc5dee76803d7..1cf6a0b48fd7456cbc2857eaab173f58853acbde 100644 (file)
@@ -290,6 +290,17 @@ static int mxc_rtc_read_time(struct device *dev, struct rtc_time *tm)
  */
 static int mxc_rtc_set_mmss(struct device *dev, unsigned long time)
 {
+       /* RTC_DAYR register is 9-bit in MX1 SoC,
+        * save time and day of year only
+        */
+       if (cpu_is_mx1()) {
+               struct rtc_time tm;
+
+               rtc_time_to_tm(time, &tm);
+               tm.tm_year = 70;
+               rtc_tm_to_time(&tm, &time);
+       }
+
        /* Avoid roll-over from reading the different registers */
        do {
                set_alarm_or_time(dev, MXC_RTC_TIME, time);