xref: /rk3399_rockchip-uboot/drivers/rtc/mc13xxx-rtc.c (revision 02ffb580e6ab7aaa7f6703ed35f489e97439cb65)
14e8b7544SFabio Estevam /*
24e8b7544SFabio Estevam  * Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
34e8b7544SFabio Estevam  *
41a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
54e8b7544SFabio Estevam  */
64e8b7544SFabio Estevam 
74e8b7544SFabio Estevam #include <common.h>
84e8b7544SFabio Estevam #include <rtc.h>
94e8b7544SFabio Estevam #include <spi.h>
10c7336815SŁukasz Majewski #include <power/pmic.h>
114e8b7544SFabio Estevam #include <fsl_pmic.h>
124e8b7544SFabio Estevam 
rtc_get(struct rtc_time * rtc)134e8b7544SFabio Estevam int rtc_get(struct rtc_time *rtc)
144e8b7544SFabio Estevam {
154e8b7544SFabio Estevam 	u32 day1, day2, time;
164e8b7544SFabio Estevam 	int tim, i = 0;
17c7336815SŁukasz Majewski 	struct pmic *p = pmic_get("FSL_PMIC");
184e8b7544SFabio Estevam 	int ret;
194e8b7544SFabio Estevam 
20c7336815SŁukasz Majewski 	if (!p)
21c7336815SŁukasz Majewski 		return -1;
224e8b7544SFabio Estevam 	do {
234e8b7544SFabio Estevam 		ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
244e8b7544SFabio Estevam 		if (ret < 0)
254e8b7544SFabio Estevam 			return -1;
264e8b7544SFabio Estevam 
274e8b7544SFabio Estevam 		ret = pmic_reg_read(p, REG_RTC_TIME, &time);
284e8b7544SFabio Estevam 		if (ret < 0)
294e8b7544SFabio Estevam 			return -1;
304e8b7544SFabio Estevam 
314e8b7544SFabio Estevam 		ret = pmic_reg_read(p, REG_RTC_DAY, &day2);
324e8b7544SFabio Estevam 		if (ret < 0)
334e8b7544SFabio Estevam 			return -1;
344e8b7544SFabio Estevam 
354e8b7544SFabio Estevam 	} while (day1 != day2 && i++ < 3);
364e8b7544SFabio Estevam 
374e8b7544SFabio Estevam 	tim = day1 * 86400 + time;
384e8b7544SFabio Estevam 
399f9276c3SSimon Glass 	rtc_to_tm(tim, rtc);
404e8b7544SFabio Estevam 
414e8b7544SFabio Estevam 	rtc->tm_yday = 0;
424e8b7544SFabio Estevam 	rtc->tm_isdst = 0;
434e8b7544SFabio Estevam 
444e8b7544SFabio Estevam 	return 0;
454e8b7544SFabio Estevam }
464e8b7544SFabio Estevam 
rtc_set(struct rtc_time * rtc)474e8b7544SFabio Estevam int rtc_set(struct rtc_time *rtc)
484e8b7544SFabio Estevam {
494e8b7544SFabio Estevam 	u32 time, day;
50c7336815SŁukasz Majewski 	struct pmic *p = pmic_get("FSL_PMIC");
51c7336815SŁukasz Majewski 	if (!p)
52c7336815SŁukasz Majewski 		return -1;
534e8b7544SFabio Estevam 
54*71420983SSimon Glass 	time = rtc_mktime(rtc);
554e8b7544SFabio Estevam 	day = time / 86400;
564e8b7544SFabio Estevam 	time %= 86400;
574e8b7544SFabio Estevam 
584e8b7544SFabio Estevam 	pmic_reg_write(p, REG_RTC_DAY, day);
594e8b7544SFabio Estevam 	pmic_reg_write(p, REG_RTC_TIME, time);
604e8b7544SFabio Estevam 
614e8b7544SFabio Estevam 	return 0;
624e8b7544SFabio Estevam }
634e8b7544SFabio Estevam 
rtc_reset(void)644e8b7544SFabio Estevam void rtc_reset(void)
654e8b7544SFabio Estevam {
664e8b7544SFabio Estevam }
67