mc13xxx-rtc.c 1.0 KB

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