1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
24e8b7544SFabio Estevam /*
34e8b7544SFabio Estevam * Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
44e8b7544SFabio Estevam */
54e8b7544SFabio Estevam
64e8b7544SFabio Estevam #include <common.h>
74e8b7544SFabio Estevam #include <rtc.h>
84e8b7544SFabio Estevam #include <spi.h>
9c7336815SŁukasz Majewski #include <power/pmic.h>
104e8b7544SFabio Estevam #include <fsl_pmic.h>
114e8b7544SFabio Estevam
rtc_get(struct rtc_time * rtc)124e8b7544SFabio Estevam int rtc_get(struct rtc_time *rtc)
134e8b7544SFabio Estevam {
144e8b7544SFabio Estevam u32 day1, day2, time;
154e8b7544SFabio Estevam int tim, i = 0;
16c7336815SŁukasz Majewski struct pmic *p = pmic_get("FSL_PMIC");
174e8b7544SFabio Estevam int ret;
184e8b7544SFabio Estevam
19c7336815SŁukasz Majewski if (!p)
20c7336815SŁukasz Majewski return -1;
214e8b7544SFabio Estevam do {
224e8b7544SFabio Estevam ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
234e8b7544SFabio Estevam if (ret < 0)
244e8b7544SFabio Estevam return -1;
254e8b7544SFabio Estevam
264e8b7544SFabio Estevam ret = pmic_reg_read(p, REG_RTC_TIME, &time);
274e8b7544SFabio Estevam if (ret < 0)
284e8b7544SFabio Estevam return -1;
294e8b7544SFabio Estevam
304e8b7544SFabio Estevam ret = pmic_reg_read(p, REG_RTC_DAY, &day2);
314e8b7544SFabio Estevam if (ret < 0)
324e8b7544SFabio Estevam return -1;
334e8b7544SFabio Estevam
344e8b7544SFabio Estevam } while (day1 != day2 && i++ < 3);
354e8b7544SFabio Estevam
364e8b7544SFabio Estevam tim = day1 * 86400 + time;
374e8b7544SFabio Estevam
389f9276c3SSimon Glass rtc_to_tm(tim, rtc);
394e8b7544SFabio Estevam
404e8b7544SFabio Estevam rtc->tm_yday = 0;
414e8b7544SFabio Estevam rtc->tm_isdst = 0;
424e8b7544SFabio Estevam
434e8b7544SFabio Estevam return 0;
444e8b7544SFabio Estevam }
454e8b7544SFabio Estevam
rtc_set(struct rtc_time * rtc)464e8b7544SFabio Estevam int rtc_set(struct rtc_time *rtc)
474e8b7544SFabio Estevam {
484e8b7544SFabio Estevam u32 time, day;
49c7336815SŁukasz Majewski struct pmic *p = pmic_get("FSL_PMIC");
50c7336815SŁukasz Majewski if (!p)
51c7336815SŁukasz Majewski return -1;
524e8b7544SFabio Estevam
5371420983SSimon Glass time = rtc_mktime(rtc);
544e8b7544SFabio Estevam day = time / 86400;
554e8b7544SFabio Estevam time %= 86400;
564e8b7544SFabio Estevam
574e8b7544SFabio Estevam pmic_reg_write(p, REG_RTC_DAY, day);
584e8b7544SFabio Estevam pmic_reg_write(p, REG_RTC_TIME, time);
594e8b7544SFabio Estevam
604e8b7544SFabio Estevam return 0;
614e8b7544SFabio Estevam }
624e8b7544SFabio Estevam
rtc_reset(void)634e8b7544SFabio Estevam void rtc_reset(void)
644e8b7544SFabio Estevam {
654e8b7544SFabio Estevam }
66