X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Frtc.h;h=10104e3bf5a904e9c67b11c14782642aa30d9627;hb=a29491ade0adf3dbb9dc51be8b45530edde1f1df;hp=49142b6e1880056f8ede382e279a391572953030;hpb=01cce5fdd098add2b8aa570468cb35fca5d778fe;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/rtc.h b/include/rtc.h index 49142b6..10104e3 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -1,8 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * (C) Copyright 2001 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * SPDX-License-Identifier: GPL-2.0+ */ /* @@ -17,8 +16,12 @@ #include #include +typedef int64_t time64_t; + #ifdef CONFIG_DM_RTC +struct udevice; + struct rtc_ops { /** * get() - get the current time @@ -55,6 +58,30 @@ struct rtc_ops { int (*reset)(struct udevice *dev); /** + * read() - Read multiple 8-bit registers + * + * @dev: Device to read from + * @reg: First register to read + * @buf: Output buffer + * @len: Number of registers to read + * @return 0 if OK, -ve on error + */ + int (*read)(struct udevice *dev, unsigned int reg, + u8 *buf, unsigned int len); + + /** + * write() - Write multiple 8-bit registers + * + * @dev: Device to write to + * @reg: First register to write + * @buf: Input buffer + * @len: Number of registers to write + * @return 0 if OK, -ve on error + */ + int (*write)(struct udevice *dev, unsigned int reg, + const u8 *buf, unsigned int len); + + /** * read8() - Read an 8-bit register * * @dev: Device to read from @@ -69,7 +96,7 @@ struct rtc_ops { * @dev: Device to write to * @reg: Register to write * @value: Value to write - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int (*write8)(struct udevice *dev, unsigned int reg, int val); }; @@ -82,16 +109,16 @@ struct rtc_ops { * * @dev: Device to read from * @time: Place to put the current time - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int dm_rtc_get(struct udevice *dev, struct rtc_time *time); /** - * dm_rtc_put() - Write a time to an RTC + * dm_rtc_set() - Write a time to an RTC * * @dev: Device to read from * @time: Time to write into the RTC - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int dm_rtc_set(struct udevice *dev, struct rtc_time *time); @@ -104,16 +131,39 @@ int dm_rtc_set(struct udevice *dev, struct rtc_time *time); * the caller. * * @dev: Device to read from - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int dm_rtc_reset(struct udevice *dev); /** + * dm_rtc_read() - Read multiple 8-bit registers + * + * @dev: Device to read from + * @reg: First register to read + * @buf: Output buffer + * @len: Number of registers to read + * Return: 0 if OK, -ve on error + */ +int dm_rtc_read(struct udevice *dev, unsigned int reg, u8 *buf, unsigned int len); + +/** + * dm_rtc_write() - Write multiple 8-bit registers + * + * @dev: Device to write to + * @reg: First register to write + * @buf: Input buffer + * @len: Number of registers to write + * Return: 0 if OK, -ve on error + */ +int dm_rtc_write(struct udevice *dev, unsigned int reg, + const u8 *buf, unsigned int len); + +/** * rtc_read8() - Read an 8-bit register * * @dev: Device to read from * @reg: Register to read - * @return value read, or -ve on error + * Return: value read, or -ve on error */ int rtc_read8(struct udevice *dev, unsigned int reg); @@ -123,7 +173,7 @@ int rtc_read8(struct udevice *dev, unsigned int reg); * @dev: Device to write to * @reg: Register to write * @value: Value to write - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int rtc_write8(struct udevice *dev, unsigned int reg, int val); @@ -133,7 +183,7 @@ int rtc_write8(struct udevice *dev, unsigned int reg, int val); * @dev: Device to read from * @reg: Offset to start reading from * @valuep: Place to put the value that is read - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int rtc_read16(struct udevice *dev, unsigned int reg, u16 *valuep); @@ -143,7 +193,7 @@ int rtc_read16(struct udevice *dev, unsigned int reg, u16 *valuep); * @dev: Device to write to * @reg: Register to start writing to * @value: Value to write - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int rtc_write16(struct udevice *dev, unsigned int reg, u16 value); @@ -153,7 +203,7 @@ int rtc_write16(struct udevice *dev, unsigned int reg, u16 value); * @dev: Device to read from * @reg: Offset to start reading from * @valuep: Place to put the value that is read - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int rtc_read32(struct udevice *dev, unsigned int reg, u32 *valuep); @@ -163,21 +213,27 @@ int rtc_read32(struct udevice *dev, unsigned int reg, u32 *valuep); * @dev: Device to write to * @reg: Register to start writing to * @value: Value to write - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int rtc_write32(struct udevice *dev, unsigned int reg, u32 value); +#ifdef CONFIG_RTC_ENABLE_32KHZ_OUTPUT +int rtc_enable_32khz_output(int busnum, int chip_addr); +#endif + #else int rtc_get (struct rtc_time *); int rtc_set (struct rtc_time *); void rtc_reset (void); +#ifdef CONFIG_RTC_ENABLE_32KHZ_OUTPUT void rtc_enable_32khz_output(void); +#endif /** * rtc_read8() - Read an 8-bit register * * @reg: Register to read - * @return value read + * Return: value read */ int rtc_read8(int reg); @@ -193,7 +249,7 @@ void rtc_write8(int reg, uchar val); * rtc_read32() - Read a 32-bit value from the RTC * * @reg: Offset to start reading from - * @return value read + * Return: value read */ u32 rtc_read32(int reg); @@ -209,7 +265,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 @@ -218,7 +285,7 @@ void rtc_init(void); * It sets time->tm_wdaay to the correct day of the week. * * @time: Time to inspect. tm_wday is updated - * @return 0 if OK, -EINVAL if the weekday could not be determined + * Return: 0 if OK, -EINVAL if the weekday could not be determined */ int rtc_calc_weekday(struct rtc_time *time); @@ -232,12 +299,11 @@ 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 + * rtc_mktime() - Convert a broken-out time into a time64_t value * * The following fields need to be valid for this function to work: * tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year @@ -245,8 +311,16 @@ int rtc_to_tm(int time_t, struct rtc_time *time); * Note that tm_wday and tm_yday are ignored. * * @time: Broken-out time to convert - * @return corresponding time_t value, seconds since 1970-01-01 00:00:00 + * Return: corresponding time64_t value, seconds since 1970-01-01 00:00:00 + */ +time64_t rtc_mktime(const struct rtc_time *time); + +/** + * rtc_month_days() - The number of days in the month + * + * @month: month (January = 0) + * @year: year (4 digits) */ -unsigned long rtc_mktime(const struct rtc_time *time); +int rtc_month_days(unsigned int month, unsigned int year); #endif /* _RTC_H_ */