Commit c7c7c8db authored by Dario Binacchi's avatar Dario Binacchi Committed by Lokesh Vutla
Browse files

rtc: davinci: use unlock/lock mechanism



The RTC module contains a kicker mechanism to prevent any spurious
writes from changing the register values. To set the time, you must
first unlock the TC registers, update them and then lock.
Signed-off-by: default avatarDario Binacchi <dariobin@libero.it>
Signed-off-by: Lokesh Vutla's avatarLokesh Vutla <lokeshvutla@ti.com>
Link: https://lore.kernel.org/r/20210602203805.11494-6-dariobin@libero.it
parent 79250ef3
......@@ -16,6 +16,18 @@
#define RTC_BASE DAVINCI_RTC_BASE
#endif
static void davinci_rtc_lock(struct davinci_rtc *rtc)
{
writel(0, &rtc->kick0r);
writel(0, &rtc->kick1r);
}
static void davinci_rtc_unlock(struct davinci_rtc *rtc)
{
writel(RTC_KICK0R_WE, &rtc->kick0r);
writel(RTC_KICK1R_WE, &rtc->kick1r);
}
static int davinci_rtc_wait_not_busy(struct davinci_rtc *rtc)
{
int count;
......@@ -89,6 +101,7 @@ int rtc_set(struct rtc_time *tmp)
if (ret)
return ret;
davinci_rtc_unlock(rtc);
writeb(bin2bcd(tmp->tm_year % 100), &rtc->year);
writeb(bin2bcd(tmp->tm_mon), &rtc->month);
......@@ -97,6 +110,7 @@ int rtc_set(struct rtc_time *tmp)
writeb(bin2bcd(tmp->tm_hour), &rtc->hours);
writeb(bin2bcd(tmp->tm_min), &rtc->minutes);
writeb(bin2bcd(tmp->tm_sec), &rtc->second);
davinci_rtc_lock(rtc);
debug("Set DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n",
tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment