mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-27 23:20:26 +09:00
9f9276c34c
Rename this function so that it is clear that it is provided by the RTC. Also return an error when it cannot function as expected. This is unlikely to occur since it works for dates since 1752 and many RTCs do not support such old dates. Still it is better to be accurate. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Heiko Schocher <hs@denx.de>
68 lines
1.1 KiB
C
68 lines
1.1 KiB
C
/*
|
|
* Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <rtc.h>
|
|
#include <spi.h>
|
|
#include <power/pmic.h>
|
|
#include <fsl_pmic.h>
|
|
|
|
int rtc_get(struct rtc_time *rtc)
|
|
{
|
|
u32 day1, day2, time;
|
|
int tim, i = 0;
|
|
struct pmic *p = pmic_get("FSL_PMIC");
|
|
int ret;
|
|
|
|
if (!p)
|
|
return -1;
|
|
do {
|
|
ret = pmic_reg_read(p, REG_RTC_DAY, &day1);
|
|
if (ret < 0)
|
|
return -1;
|
|
|
|
ret = pmic_reg_read(p, REG_RTC_TIME, &time);
|
|
if (ret < 0)
|
|
return -1;
|
|
|
|
ret = pmic_reg_read(p, REG_RTC_DAY, &day2);
|
|
if (ret < 0)
|
|
return -1;
|
|
|
|
} while (day1 != day2 && i++ < 3);
|
|
|
|
tim = day1 * 86400 + time;
|
|
|
|
rtc_to_tm(tim, rtc);
|
|
|
|
rtc->tm_yday = 0;
|
|
rtc->tm_isdst = 0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int rtc_set(struct rtc_time *rtc)
|
|
{
|
|
u32 time, day;
|
|
struct pmic *p = pmic_get("FSL_PMIC");
|
|
if (!p)
|
|
return -1;
|
|
|
|
time = mktime(rtc->tm_year, rtc->tm_mon, rtc->tm_mday,
|
|
rtc->tm_hour, rtc->tm_min, rtc->tm_sec);
|
|
day = time / 86400;
|
|
time %= 86400;
|
|
|
|
pmic_reg_write(p, REG_RTC_DAY, day);
|
|
pmic_reg_write(p, REG_RTC_TIME, time);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void rtc_reset(void)
|
|
{
|
|
}
|