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