From 3454c315c65e1704eeccd1e60f0a874c7b170eed Mon Sep 17 00:00:00 2001 From: Yauhen Kharuzhy Date: Wed, 30 Nov 2011 15:11:44 +1100 Subject: [PATCH] drivers/rtc/rtc-mxc.c: fix setting time for MX1 SoC 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 Cc: Daniel Mack Cc: Alessandro Zummo Signed-off-by: Andrew Morton --- drivers/rtc/rtc-mxc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index 39e41fbdf08b..1cf6a0b48fd7 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -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); -- 2.39.5