1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
4 */
5
6#include <rtc.h>
7#include <spi.h>
8#include <power/pmic.h>
9#include <fsl_pmic.h>
10
11int rtc_get(struct rtc_time *rtc)
12{
13	u32 day1, day2, time;
14	int tim, i = 0;
15	struct pmic *p = pmic_get("FSL_PMIC");
16	int ret;
17
18	if (!p)
19		return -1;
20	do {
21		ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
22		if (ret < 0)
23			return -1;
24
25		ret = pmic_reg_read(p, REG_RTC_TIME, &time);
26		if (ret < 0)
27			return -1;
28
29		ret = pmic_reg_read(p, REG_RTC_DAY, &day2);
30		if (ret < 0)
31			return -1;
32
33	} while (day1 != day2 && i++ < 3);
34
35	tim = day1 * 86400 + time;
36
37	rtc_to_tm(tim, rtc);
38
39	rtc->tm_yday = 0;
40	rtc->tm_isdst = 0;
41
42	return 0;
43}
44
45int rtc_set(struct rtc_time *rtc)
46{
47	u32 time, day;
48	struct pmic *p = pmic_get("FSL_PMIC");
49	if (!p)
50		return -1;
51
52	time = rtc_mktime(rtc);
53	day = time / 86400;
54	time %= 86400;
55
56	pmic_reg_write(p, REG_RTC_DAY, day);
57	pmic_reg_write(p, REG_RTC_TIME, time);
58
59	return 0;
60}
61
62void rtc_reset(void)
63{
64}
65