From 992c1db45591b891935a6da5c3f14d8af5def05b Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sat, 7 Jul 2018 23:39:11 +0200 Subject: drivers: rtc: resolve year 2038 problem in rtc_to_tm Our implementation of rtc_to_tm() cannot handle dates of more than 0x7fffffff seconds after 1970-01-01. Adopt the Linux kernel implementation. Signed-off-by: Heinrich Schuchardt --- include/rtc.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'include/rtc.h') diff --git a/include/rtc.h b/include/rtc.h index 746624d799..0d964d56d5 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -208,7 +208,18 @@ void rtc_write32(int reg, u32 value); * rtc_init() - Set up the real time clock ready for use */ void rtc_init(void); -#endif +#endif /* CONFIG_DM_RTC */ + +/** + * is_leap_year - Check if year is a leap year + * + * @year Year + * @return 1 if leap year + */ +static inline bool is_leap_year(unsigned int year) +{ + return (!(year % 4) && (year % 100)) || !(year % 400); +} /** * rtc_calc_weekday() - Work out the weekday from a time @@ -231,9 +242,8 @@ int rtc_calc_weekday(struct rtc_time *time); * * @time_t: Number of seconds since 1970-01-01 00:00:00 * @time: Place to put the broken-out time - * @return 0 if OK, -EINVAL if the weekday could not be determined */ -int rtc_to_tm(int time_t, struct rtc_time *time); +void rtc_to_tm(u64 time_t, struct rtc_time *time); /** * rtc_mktime() - Convert a broken-out time into a time_t value -- cgit v1.2.1