1 /* 2 * (C) Copyright 2001 3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 /* 9 * Generic RTC interface. 10 */ 11 #ifndef _RTC_H_ 12 #define _RTC_H_ 13 14 /* bcd<->bin functions are needed by almost all the RTC drivers, let's include 15 * it there instead of in evey single driver */ 16 17 #include <bcd.h> 18 19 /* 20 * The struct used to pass data from the generic interface code to 21 * the hardware dependend low-level code ande vice versa. Identical 22 * to struct rtc_time used by the Linux kernel. 23 * 24 * Note that there are small but significant differences to the 25 * common "struct time": 26 * 27 * struct time: struct rtc_time: 28 * tm_mon 0 ... 11 1 ... 12 29 * tm_year years since 1900 years since 0 30 */ 31 32 struct rtc_time { 33 int tm_sec; 34 int tm_min; 35 int tm_hour; 36 int tm_mday; 37 int tm_mon; 38 int tm_year; 39 int tm_wday; 40 int tm_yday; 41 int tm_isdst; 42 }; 43 44 int rtc_get (struct rtc_time *); 45 int rtc_set (struct rtc_time *); 46 void rtc_reset (void); 47 48 unsigned long mktime (unsigned int, unsigned int, unsigned int, 49 unsigned int, unsigned int, unsigned int); 50 51 /** 52 * rtc_read8() - Read an 8-bit register 53 * 54 * @reg: Register to read 55 * @return value read 56 */ 57 int rtc_read8(int reg); 58 59 /** 60 * rtc_write8() - Write an 8-bit register 61 * 62 * @reg: Register to write 63 * @value: Value to write 64 */ 65 void rtc_write8(int reg, uchar val); 66 67 /** 68 * rtc_read32() - Read a 32-bit value from the RTC 69 * 70 * @reg: Offset to start reading from 71 * @return value read 72 */ 73 u32 rtc_read32(int reg); 74 75 /** 76 * rtc_write32() - Write a 32-bit value to the RTC 77 * 78 * @reg: Register to start writing to 79 * @value: Value to write 80 */ 81 void rtc_write32(int reg, u32 value); 82 83 /** 84 * rtc_init() - Set up the real time clock ready for use 85 */ 86 void rtc_init(void); 87 88 /** 89 * rtc_calc_weekday() - Work out the weekday from a time 90 * 91 * This only works for the Gregorian calendar - i.e. after 1752 (in the UK). 92 * It sets time->tm_wdaay to the correct day of the week. 93 * 94 * @time: Time to inspect. tm_wday is updated 95 * @return 0 if OK, -EINVAL if the weekday could not be determined 96 */ 97 int rtc_calc_weekday(struct rtc_time *time); 98 99 /** 100 * rtc_to_tm() - Convert a time_t value into a broken-out time 101 * 102 * The following fields are set up by this function: 103 * tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday 104 * 105 * Note that tm_yday and tm_isdst are set to 0. 106 * 107 * @time_t: Number of seconds since 1970-01-01 00:00:00 108 * @time: Place to put the broken-out time 109 * @return 0 if OK, -EINVAL if the weekday could not be determined 110 */ 111 int rtc_to_tm(int time_t, struct rtc_time *time); 112 113 #endif /* _RTC_H_ */ 114