diff --git a/ChangeLog b/ChangeLog index 1d420148450..f879a7bb386 100755 --- a/ChangeLog +++ b/ChangeLog @@ -11114,3 +11114,6 @@ * configs/boardctl.h, Kconfig, include/sys/boardctl.h, and nuttx/board.h: Add a command to the boardctl() interface to obtain a board unique ID (2015-11-18). + * drivers/timers/ds3231.c: Driver extended to include support for the + DS1307 RTC (2015-11-18). + diff --git a/drivers/timers/Kconfig b/drivers/timers/Kconfig index 1c4f5685de3..95167ecd8fa 100644 --- a/drivers/timers/Kconfig +++ b/drivers/timers/Kconfig @@ -118,8 +118,8 @@ config RTC_IOCTL endif # RTC_DRIVER -config RTC_DS3231 - bool "DS3231 RTC Driver" +config RTC_DS3XXX + bool "DS3231/DS1307 RTC Driver" default n select I2C select I2C_TRANSFER @@ -127,14 +127,30 @@ config RTC_DS3231 ---help--- Enables support for the Maxim Integrated DS3231 I2C RTC timer. -if RTC_DS3231 +if RTC_DS3XXX + +choice + prompt "Maxim Integrated RTC" + default RTC_DS3231 + +config RTC_DS1307 + bool "DS1307" + ---help--- + Enables support for the Maxim Integrated DS3231 I2C RTC timer. + +config RTC_DS3231 + bool "DS3231" + ---help--- + Enables support for the Maxim Integrated DS1307 I2C RTC timer. + +endchoice # Maxim Integrated RTC config DS3231_I2C_FREQUENCY - int "DS3231 I2C frequency" + int "DS3231/DS1307 I2C frequency" default 400000 range 1 4000000 -endif # RTC_DS3231 +endif # RTC_DS3XXX endif # RTC menuconfig WATCHDOG diff --git a/drivers/timers/Make.defs b/drivers/timers/Make.defs index e8569918263..f52599e1f8a 100644 --- a/drivers/timers/Make.defs +++ b/drivers/timers/Make.defs @@ -51,7 +51,7 @@ ifeq ($(CONFIG_TIMER),y) TMRVPATH = :timers endif -ifeq ($(CONFIG_RTC_DS3231),y) +ifeq ($(CONFIG_RTC_DS3XXX),y) CSRCS += ds3231.c TMRDEPPATH = --dep-path timers TMRVPATH = :timers diff --git a/drivers/timers/ds3231.c b/drivers/timers/ds3231.c index 396e5f92bec..d3c122f2730 100644 --- a/drivers/timers/ds3231.c +++ b/drivers/timers/ds3231.c @@ -50,7 +50,7 @@ #include "ds3231.h" -#ifdef CONFIG_RTC_DS3231 +#ifdef CONFIG_RTC_DS3XXX /************************************************************************************ * Pre-processor Definitions @@ -216,13 +216,13 @@ static int rtc_bcd2bin(uint8_t value) ************************************************************************************/ /************************************************************************************ - * Name: ds3231_rtc_initialize + * Name: ds3xxx_rtc_initialize * * Description: * Initialize the hardware RTC per the selected configuration. This function is * called once during the OS initialization sequence by board-specific logic. * - * After ds3231_rtc_initialize() is called, the OS function clock_synchronize() + * After ds3xxx_rtc_initialize() is called, the OS function clock_synchronize() * should also be called to synchronize the system timer to a hardware RTC. That * operation is normally performed automatically by the system during clock * initialization. However, when an external RTC is used, the board logic will @@ -237,7 +237,7 @@ static int rtc_bcd2bin(uint8_t value) * ************************************************************************************/ -int ds3231_rtc_initialize(FAR struct i2c_dev_s *i2c) +int ds3xxx_rtc_initialize(FAR struct i2c_dev_s *i2c) { /* Remember the i2c device and claim that the RTC is enabled */ @@ -280,7 +280,7 @@ int up_rtc_getdatetime(FAR struct tm *tp) /* Select to begin reading at the seconds register */ - secaddr = DS3231_TIME_SECR; + secaddr = DS3XXX_TIME_SECR; msg[0].addr = DS3231_I2C_ADDRESS; msg[0].flags = 0; @@ -331,35 +331,35 @@ int up_rtc_getdatetime(FAR struct tm *tp) /* Format the return time */ /* Return seconds (0-61) */ - tp->tm_sec = rtc_bcd2bin(buffer[0] & DS3231_TIME_SEC_BCDMASK); + tp->tm_sec = rtc_bcd2bin(buffer[0] & DS3XXX_TIME_SEC_BCDMASK); /* Return minutes (0-59) */ - tp->tm_min = rtc_bcd2bin(buffer[1] & DS3231_TIME_MIN_BCDMASK); + tp->tm_min = rtc_bcd2bin(buffer[1] & DS3XXX_TIME_MIN_BCDMASK); /* Return hour (0-23). This assumes 24-hour time was set. */ - tp->tm_hour = rtc_bcd2bin(buffer[2] & DS3231_TIME_HOUR24_BCDMASK); + tp->tm_hour = rtc_bcd2bin(buffer[2] & DS3XXX_TIME_HOUR24_BCDMASK); #if defined(CONFIG_LIBC_LOCALTIME) || defined(CONFIG_TIME_EXTENDED) /* Return the day of the week (0-6) */ - tp->tm_wday = (rtc_bcd2bin(buffer[3]) & DS3231_TIME_DAY_MASK) - 1; + tp->tm_wday = (rtc_bcd2bin(buffer[3]) & DS3XXX_TIME_DAY_MASK) - 1; #endif /* Return the day of the month (1-31) */ - tp->tm_mday = rtc_bcd2bin(buffer[4] & DS3231_TIME_DATE_BCDMASK); + tp->tm_mday = rtc_bcd2bin(buffer[4] & DS3XXX_TIME_DATE_BCDMASK); /* Return the month (0-11) */ - tp->tm_mon = rtc_bcd2bin(buffer[5] & DS3231_TIME_MONTH_BCDMASK) - 1; + tp->tm_mon = rtc_bcd2bin(buffer[5] & DS3XXX_TIME_MONTH_BCDMASK) - 1; /* Return the years since 1990 */ - tmp = rtc_bcd2bin(buffer[5] & DS3231_TIME_YEAR_BCDMASK); + tmp = rtc_bcd2bin(buffer[5] & DS3XXX_TIME_YEAR_BCDMASK); - if ((buffer[6] & DS3231_TIME_CENTURY_MASK) == DS3231_TIME_1900) + if ((buffer[6] & DS3XXX_TIME_CENTURY_MASK) == DS3XXX_TIME_1900) { tp->tm_year = tmp; } @@ -429,7 +429,7 @@ int up_rtc_settime(FAR const struct timespec *tp) /* Construct the message */ /* Write starting with the seconds regiser */ - buffer[0] = DS3231_TIME_SECR; + buffer[0] = DS3XXX_TIME_SECR; /* Save seconds (0-59) converted to BCD */ @@ -441,7 +441,7 @@ int up_rtc_settime(FAR const struct timespec *tp) /* Save hour (0-23) with 24-hour time indicatin */ - buffer[3] = rtc_bin2bcd(newtm.tm_hour) | DS3231_TIME_24; + buffer[3] = rtc_bin2bcd(newtm.tm_hour) | DS3XXX_TIME_24; /* Save the day of the week (1-7) */ @@ -461,14 +461,14 @@ int up_rtc_settime(FAR const struct timespec *tp) { /* Convert years in the range 1900-1999 */ - century = DS3231_TIME_1900; + century = DS3XXX_TIME_1900; year = newtm.tm_year; } else { /* Convert years in the range 2000-2099 */ - century = DS3231_TIME_2000; + century = DS3XXX_TIME_2000; year = newtm.tm_year - 100; } @@ -522,4 +522,4 @@ int up_rtc_settime(FAR const struct timespec *tp) return OK; } -#endif /* CONFIG_RTC_DS3231 */ +#endif /* CONFIG_RTC_DS3XXX */ diff --git a/drivers/timers/ds3231.h b/drivers/timers/ds3231.h index 4c2a4cbc14a..57ea6f5bec7 100644 --- a/drivers/timers/ds3231.h +++ b/drivers/timers/ds3231.h @@ -46,229 +46,244 @@ * Pre-processor Definitions ****************************************************************************/ -#define DS3231_TIME_SECR 0x00 /* Seconds register */ -# define DS3231_TIME_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ -# define DS3231_TIME_SEC_MASK (15 << DS3231_TIME_SEC_SHIFT) -# define DS3231_TIME_SEC(n) ((uint8_t)(n) << DS3231_TIME_SEC_SHIFT) -# define DS3231_TIME_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ -# define DS3231_TIME_10SEC_MASK (7 << DS3231_TIME_10SEC_SHIFT) -# define DS3231_TIME_10SEC(n) ((uint8_t)(n) << DS3231_TIME_10SEC_SHIFT) -# define DS3231_TIME_SEC_BCDMASK (DS3231_TIME_SEC_MASK | DS3231_TIME_10SEC_MASK) +#define DS3XXX_TIME_SECR 0x00 /* Seconds register */ +# define DS3XXX_TIME_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ +# define DS3XXX_TIME_SEC_MASK (15 << DS3XXX_TIME_SEC_SHIFT) +# define DS3XXX_TIME_SEC(n) ((uint8_t)(n) << DS3XXX_TIME_SEC_SHIFT) +# define DS3XXX_TIME_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ +# define DS3XXX_TIME_10SEC_MASK (7 << DS3XXX_TIME_10SEC_SHIFT) +# define DS3XXX_TIME_10SEC(n) ((uint8_t)(n) << DS3XXX_TIME_10SEC_SHIFT) +# define DS3XXX_TIME_SEC_BCDMASK (DS3XXX_TIME_SEC_MASK | DS3XXX_TIME_10SEC_MASK) -#define DS3231_TIME_MINR 0x01 /* Minutes register */ -# define DS3231_TIME_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ -# define DS3231_TIME_MIN_MASK (15 << DS3231_TIME_MIN_SHIFT) -# define DS3231_TIME_MIN(n) ((uint8_t)(n) << DS3231_TIME_MIN_SHIFT) -# define DS3231_TIME_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ -# define DS3231_TIME_10MIN_MASK (7 << DS3231_TIME_10MIN_SHIFT) -# define DS3231_TIME_10MIN(n) ((uint8_t)(n) << DS3231_TIME_10MIN_SHIFT) -# define DS3231_TIME_MIN_BCDMASK (DS3231_TIME_MIN_MASK | DS3231_TIME_10MIN_MASK) +#define DS3XXX_TIME_MINR 0x01 /* Minutes register */ +# define DS3XXX_TIME_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ +# define DS3XXX_TIME_MIN_MASK (15 << DS3XXX_TIME_MIN_SHIFT) +# define DS3XXX_TIME_MIN(n) ((uint8_t)(n) << DS3XXX_TIME_MIN_SHIFT) +# define DS3XXX_TIME_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ +# define DS3XXX_TIME_10MIN_MASK (7 << DS3XXX_TIME_10MIN_SHIFT) +# define DS3XXX_TIME_10MIN(n) ((uint8_t)(n) << DS3XXX_TIME_10MIN_SHIFT) +# define DS3XXX_TIME_MIN_BCDMASK (DS3XXX_TIME_MIN_MASK | DS3XXX_TIME_10MIN_MASK) -#define DS3231_TIME_HOURR 0x02 /* Hours register */ -# define DS3231_TIME_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ -# define DS3231_TIME_HOUR_MASK (15 << DS3231_TIME_HOUR_SHIFT) -# define DS3231_TIME_HOUR(n) ((uint8_t)(n) << DS3231_TIME_HOUR_SHIFT) -# define DS3231_TIME_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ -# define DS3231_TIME_10HOUR12_MASK (1 << DS3231_TIME_10HOUR12_SHIFT) -# define DS3231_TIME_10HOUR12(n) ((uint8_t)(n) << DS3231_TIME_10HOUR12_SHIFT) -# define DS3231_TIME_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ -# define DS3231_TIME_10HOUR24_MASK (3 << DS3231_TIME_10HOUR24_SHIFT) -# define DS3231_TIME_10HOUR24(n) ((uint8_t)(n) << DS3231_TIME_10HOUR24_SHIFT) -# define DS3231_TIME_HOUR12_BCDMASK (DS3231_TIME_HOUR_MASK | DS3231_TIME_10HOUR12_MASK) -# define DS3231_TIME_HOUR24_BCDMASK (DS3231_TIME_HOUR_MASK | DS3231_TIME_10HOUR24_MASK) -# define DS3231_TIME_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ -# define DS3231_TIME_AMPM_MASK (1 << DS3231_TIME_AMPM_SHIFT) -# define DS3231_TIME_AM ((uint8_t)(0) << DS3231_TIME_AMPM_SHIFT) -# define DS3231_TIME_PM ((uint8_t)(1) << DS3231_TIME_AMPM_SHIFT) -# define DS3231_TIME_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ -# define DS3231_TIME_1224_MASK (1 << DS3231_TIME_1224_SHIFT) -# define DS3231_TIME_24 ((uint8_t)(0) << DS3231_TIME_1224_SHIFT) -# define DS3231_TIME_12 ((uint8_t)(1) << DS3231_TIME_1224_SHIFT) +#define DS3XXX_TIME_HOURR 0x02 /* Hours register */ +# define DS3XXX_TIME_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ +# define DS3XXX_TIME_HOUR_MASK (15 << DS3XXX_TIME_HOUR_SHIFT) +# define DS3XXX_TIME_HOUR(n) ((uint8_t)(n) << DS3XXX_TIME_HOUR_SHIFT) +# define DS3XXX_TIME_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ +# define DS3XXX_TIME_10HOUR12_MASK (1 << DS3XXX_TIME_10HOUR12_SHIFT) +# define DS3XXX_TIME_10HOUR12(n) ((uint8_t)(n) << DS3XXX_TIME_10HOUR12_SHIFT) +# define DS3XXX_TIME_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ +# define DS3XXX_TIME_10HOUR24_MASK (3 << DS3XXX_TIME_10HOUR24_SHIFT) +# define DS3XXX_TIME_10HOUR24(n) ((uint8_t)(n) << DS3XXX_TIME_10HOUR24_SHIFT) +# define DS3XXX_TIME_HOUR12_BCDMASK (DS3XXX_TIME_HOUR_MASK | DS3XXX_TIME_10HOUR12_MASK) +# define DS3XXX_TIME_HOUR24_BCDMASK (DS3XXX_TIME_HOUR_MASK | DS3XXX_TIME_10HOUR24_MASK) +# define DS3XXX_TIME_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ +# define DS3XXX_TIME_AMPM_MASK (1 << DS3XXX_TIME_AMPM_SHIFT) +# define DS3XXX_TIME_AM ((uint8_t)(0) << DS3XXX_TIME_AMPM_SHIFT) +# define DS3XXX_TIME_PM ((uint8_t)(1) << DS3XXX_TIME_AMPM_SHIFT) +# define DS3XXX_TIME_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ +# define DS3XXX_TIME_1224_MASK (1 << DS3XXX_TIME_1224_SHIFT) +# define DS3XXX_TIME_24 ((uint8_t)(0) << DS3XXX_TIME_1224_SHIFT) +# define DS3XXX_TIME_12 ((uint8_t)(1) << DS3XXX_TIME_1224_SHIFT) -#define DS3231_TIME_DAYR 0x03 /* Day of the week register */ -# define DS3231_TIME_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ -# define DS3231_TIME_DAY_MASK (7 << DS3231_TIME_DAY_SHIFT) -# define DS3231_TIME_DAY(n) ((uint8_t)(n) << DS3231_TIME_DAY_SHIFT) +#define DS3XXX_TIME_DAYR 0x03 /* Day of the week register */ +# define DS3XXX_TIME_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ +# define DS3XXX_TIME_DAY_MASK (7 << DS3XXX_TIME_DAY_SHIFT) +# define DS3XXX_TIME_DAY(n) ((uint8_t)(n) << DS3XXX_TIME_DAY_SHIFT) -#define DS3231_TIME_DATER 0x04 /* Date register */ -# define DS3231_TIME_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ -# define DS3231_TIME_DATE_MASK (15 << DS3231_TIME_DATE_SHIFT) -# define DS3231_TIME_DATE(n) ((uint8_t)(n) << DS3231_TIME_DATE_SHIFT) -# define DS3231_TIME_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ -# define DS3231_TIME_10DATE_MASK (3 << DS3231_TIME_10DATE_SHIFT) -# define DS3231_TIME_10DATE(n) ((uint8_t)(n) << DS3231_TIME_10DATE_SHIFT) -# define DS3231_TIME_DATE_BCDMASK (DS3231_TIME_DATE_MASK | DS3231_TIME_10DATE_MASK) +#define DS3XXX_TIME_DATER 0x04 /* Date register */ +# define DS3XXX_TIME_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ +# define DS3XXX_TIME_DATE_MASK (15 << DS3XXX_TIME_DATE_SHIFT) +# define DS3XXX_TIME_DATE(n) ((uint8_t)(n) << DS3XXX_TIME_DATE_SHIFT) +# define DS3XXX_TIME_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ +# define DS3XXX_TIME_10DATE_MASK (3 << DS3XXX_TIME_10DATE_SHIFT) +# define DS3XXX_TIME_10DATE(n) ((uint8_t)(n) << DS3XXX_TIME_10DATE_SHIFT) +# define DS3XXX_TIME_DATE_BCDMASK (DS3XXX_TIME_DATE_MASK | DS3XXX_TIME_10DATE_MASK) -#define DS3231_TIME_MONTHR 0x05 /* Month register */ -# define DS3231_TIME_MONTH_SHIFT 0 /* Bits 0-3: Month, range 0-9 */ -# define DS3231_TIME_MONTH_MASK (15 << DS3231_TIME_MONTH_SHIFT) -# define DS3231_TIME_MONTH(n) ((uint8_t)(n) << DS3231_TIME_MONTH_SHIFT) -# define DS3231_TIME_10MONTH_SHIFT 4 /* Bit 4: 10 month, range 0-1 */ -# define DS3231_TIME_10MONTH_MASK (1 << DS3231_TIME_10MONTH_SHIFT) -# define DS3231_TIME_10MONTH(n) ((uint8_t)(n) << DS3231_TIME_10MONTH_SHIFT) -# define DS3231_TIME_MONTH_BCDMASK (DS3231_TIME_MONTH_MASK | DS3231_TIME_10MONTH_MASK) -# define DS3231_TIME_CENTURY_SHIFT 7 /* Bit 7: AM/PM Indication */ -# define DS3231_TIME_CENTURY_MASK (1 << DS3231_TIME_CENTURY_SHIFT) -# define DS3231_TIME_1900 ((uint8_t)(0) << DS3231_TIME_CENTURY_SHIFT) -# define DS3231_TIME_2000 ((uint8_t)(1) << DS3231_TIME_CENTURY_SHIFT) +#define DS3XXX_TIME_MONTHR 0x05 /* Month register */ +# define DS3XXX_TIME_MONTH_SHIFT 0 /* Bits 0-3: Month, range 0-9 */ +# define DS3XXX_TIME_MONTH_MASK (15 << DS3XXX_TIME_MONTH_SHIFT) +# define DS3XXX_TIME_MONTH(n) ((uint8_t)(n) << DS3XXX_TIME_MONTH_SHIFT) +# define DS3XXX_TIME_10MONTH_SHIFT 4 /* Bit 4: 10 month, range 0-1 */ +# define DS3XXX_TIME_10MONTH_MASK (1 << DS3XXX_TIME_10MONTH_SHIFT) +# define DS3XXX_TIME_10MONTH(n) ((uint8_t)(n) << DS3XXX_TIME_10MONTH_SHIFT) +# define DS3XXX_TIME_MONTH_BCDMASK (DS3XXX_TIME_MONTH_MASK | DS3XXX_TIME_10MONTH_MASK) +# define DS3XXX_TIME_CENTURY_SHIFT 7 /* Bit 7: AM/PM Indication */ +# define DS3XXX_TIME_CENTURY_MASK (1 << DS3XXX_TIME_CENTURY_SHIFT) +# define DS3XXX_TIME_1900 ((uint8_t)(0) << DS3XXX_TIME_CENTURY_SHIFT) +# define DS3XXX_TIME_2000 ((uint8_t)(1) << DS3XXX_TIME_CENTURY_SHIFT) -#define DS3231_TIME_YEARR 0x06 /* Date register */ -# define DS3231_TIME_YEAR_SHIFT 0 /* Bits 0-3: Year, range 0-9 */ -# define DS3231_TIME_YEAR_MASK (15 << DS3231_TIME_YEAR_SHIFT) -# define DS3231_TIME_YEAR(n) ((uint8_t)(n) << DS3231_TIME_YEAR_SHIFT) -# define DS3231_TIME_10YEAR_SHIFT 4 /* Bits 4-7: 10 year, range 0-9 */ -# define DS3231_TIME_10YEAR_MASK (15 << DS3231_TIME_10YEAR_SHIFT) -# define DS3231_TIME_10YEAR(n) ((uint8_t)(n) << DS3231_TIME_10YEAR_SHIFT) -# define DS3231_TIME_YEAR_BCDMASK (DS3231_TIME_YEAR_MASK | DS3231_TIME_10YEAR_MASK) +#define DS3XXX_TIME_YEARR 0x06 /* Date register */ +# define DS3XXX_TIME_YEAR_SHIFT 0 /* Bits 0-3: Year, range 0-9 */ +# define DS3XXX_TIME_YEAR_MASK (15 << DS3XXX_TIME_YEAR_SHIFT) +# define DS3XXX_TIME_YEAR(n) ((uint8_t)(n) << DS3XXX_TIME_YEAR_SHIFT) +# define DS3XXX_TIME_10YEAR_SHIFT 4 /* Bits 4-7: 10 year, range 0-9 */ +# define DS3XXX_TIME_10YEAR_MASK (15 << DS3XXX_TIME_10YEAR_SHIFT) +# define DS3XXX_TIME_10YEAR(n) ((uint8_t)(n) << DS3XXX_TIME_10YEAR_SHIFT) +# define DS3XXX_TIME_YEAR_BCDMASK (DS3XXX_TIME_YEAR_MASK | DS3XXX_TIME_10YEAR_MASK) -#define DS3231_ALARM1_SECR 0x07 /* Alarm1 seconds register */ -# define DS3231_ALARM1_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ -# define DS3231_ALARM1_SEC_MASK (15 << DS3231_ALARM1_SEC_SHIFT) -# define DS3231_ALARM1_SEC(n) ((uint8_t)(n) << DS3231_ALARM1_SEC_SHIFT) -# define DS3231_ALARM1_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ -# define DS3231_ALARM1_10SEC_MASK (7 << DS3231_ALARM1_10SEC_SHIFT) -# define DS3231_ALARM1_10SEC(n) ((uint8_t)(n) << DS3231_ALARM1_10SEC_SHIFT) -# define DS3231_ALARM1_SEC_BCDMASK (DS3231_ALARM1_SEC_MASK | DS3231_ALARM1_10SEC_MASK) -# define DS3231_ALARM1_A1M1_SHIFT 7 /* Bits 7: A1M1 mask */ -# define DS3231_ALARM1_A1M1_MASK (1 << DS3231_ALARM1_A1M1_SHIFT) -# define DS3231_ALARM1_A1M1(n) ((uint8_t)(n) << DS3231_ALARM1_A1M1_SHIFT) +#ifdef CONFIG_RTC_DS1307 +# define DS1307_CR 0x07 /* Control register */ +# define DS1307_CR_RS_SHIFT (3) /* Bits 0-1: Rate selection */ +# define DS1307_CR_RS_MASK (3 << DS1307_CR_RS_SHIFT) +# define DS1307_CR_RS_1HZ (0 << DS1307_CR_RS_SHIFT) /* 1Hz */ +# define DS1307_CR_RS_4KHZ (1 << DS1307_CR_RS_SHIFT) /* 4.096kHz */ +# define DS1307_CR_RS_8KHZ (2 << DS1307_CR_RS_SHIFT) /* 8.192kHz */ +# define DS1307_CR_RS_32KHZ (3 << DS1307_CR_RS_SHIFT) /* 32.768kHz */ +# define DS1307_CR_SQWE (1 << 4) /* Bit 4: Square wave enable */ +# define DS1307_CR_OUT (1 << 7) /* Bit 7: Output control */ +# define DS1307_RAM_BASE 0x08 /* 0x08-0x3f: 56x8 RAM */ +#endif -#define DS3231_ALARM1_MINR 0x08 /* Alarm1 minutes register */ -# define DS3231_ALARM1_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ -# define DS3231_ALARM1_MIN_MASK (15 << DS3231_ALARM1_MIN_SHIFT) -# define DS3231_ALARM1_MIN(n) ((uint8_t)(n) << DS3231_ALARM1_MIN_SHIFT) -# define DS3231_ALARM1_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ -# define DS3231_ALARM1_10MIN_MASK (7 << DS3231_ALARM1_10MIN_SHIFT) -# define DS3231_ALARM1_10MIN(n) ((uint8_t)(n) << DS3231_ALARM1_10MIN_SHIFT) -# define DS3231_ALARM1_MIN_BCDMASK (DS3231_ALARM1_MIN_MASK | DS3231_ALARM1_10MIN_MASK) -# define DS3231_ALARM1_A1M2_SHIFT 7 /* Bits 7: A1M2 mask */ -# define DS3231_ALARM1_A1M2_MASK (1 << DS3231_ALARM1_A1M2_SHIFT) -# define DS3231_ALARM1_A1M2(n) ((uint8_t)(n) << DS3231_ALARM1_A1M2_SHIFT) +#ifdef CONFIG_RTC_DS3231 +# define DS3231_ALARM1_SECR 0x07 /* Alarm1 seconds register */ +# define DS3231_ALARM1_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ +# define DS3231_ALARM1_SEC_MASK (15 << DS3231_ALARM1_SEC_SHIFT) +# define DS3231_ALARM1_SEC(n) ((uint8_t)(n) << DS3231_ALARM1_SEC_SHIFT) +# define DS3231_ALARM1_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ +# define DS3231_ALARM1_10SEC_MASK (7 << DS3231_ALARM1_10SEC_SHIFT) +# define DS3231_ALARM1_10SEC(n) ((uint8_t)(n) << DS3231_ALARM1_10SEC_SHIFT) +# define DS3231_ALARM1_SEC_BCDMASK (DS3231_ALARM1_SEC_MASK | DS3231_ALARM1_10SEC_MASK) +# define DS3231_ALARM1_A1M1_SHIFT 7 /* Bits 7: A1M1 mask */ +# define DS3231_ALARM1_A1M1_MASK (1 << DS3231_ALARM1_A1M1_SHIFT) +# define DS3231_ALARM1_A1M1(n) ((uint8_t)(n) << DS3231_ALARM1_A1M1_SHIFT) -#define DS3231_ALARM1_HOURR 0x09 /* Alarm1 hours register */ -# define DS3231_ALARM1_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ -# define DS3231_ALARM1_HOUR_MASK (15 << DS3231_ALARM1_HOUR_SHIFT) -# define DS3231_ALARM1_HOUR(n) ((uint8_t)(n) << DS3231_ALARM1_HOUR_SHIFT) -# define DS3231_ALARM1_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ -# define DS3231_ALARM1_10HOUR12_MASK (1 << DS3231_ALARM1_10HOUR12_SHIFT) -# define DS3231_ALARM1_10HOUR12(n) ((uint8_t)(n) << DS3231_ALARM1_10HOUR12_SHIFT) -# define DS3231_ALARM1_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ -# define DS3231_ALARM1_10HOUR24_MASK (3 << DS3231_ALARM1_10HOUR24_SHIFT) -# define DS3231_ALARM1_10HOUR24(n) ((uint8_t)(n) << DS3231_ALARM1_10HOUR24_SHIFT) -# define DS3231_ALARM1_HOUR12_BCDMASK (DS3231_ALARM1_HOUR_MASK | DS3231_ALARM1_10HOUR12_MASK) -# define DS3231_ALARM1_HOUR24_BCDMASK (DS3231_ALARM1_HOUR_MASK | DS3231_ALARM1_10HOUR24_MASK) -# define DS3231_ALARM1_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ -# define DS3231_ALARM1_AMPM_MASK (1 << DS3231_ALARM1_AMPM_SHIFT) -# define DS3231_ALARM1_AM ((uint8_t)(0) << DS3231_ALARM1_AMPM_SHIFT) -# define DS3231_ALARM1_PM ((uint8_t)(1) << DS3231_ALARM1_AMPM_SHIFT) -# define DS3231_ALARM1_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ -# define DS3231_ALARM1_1224_MASK (1 << DS3231_ALARM1_1224_SHIFT) -# define DS3231_ALARM1_12 ((uint8_t)(0) << DS3231_ALARM1_1224_SHIFT) -# define DS3231_ALARM1_24 ((uint8_t)(1) << DS3231_ALARM1_1224_SHIFT) -# define DS3231_ALARM1_A1M3_SHIFT 7 /* Bits 7: A1M3 mask */ -# define DS3231_ALARM1_A1M3_MASK (1 << DS3231_ALARM1_A1M3_SHIFT) -# define DS3231_ALARM1_A1M3(n) ((uint8_t)(n) << DS3231_ALARM1_A1M3_SHIFT) +# define DS3231_ALARM1_MINR 0x08 /* Alarm1 minutes register */ +# define DS3231_ALARM1_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ +# define DS3231_ALARM1_MIN_MASK (15 << DS3231_ALARM1_MIN_SHIFT) +# define DS3231_ALARM1_MIN(n) ((uint8_t)(n) << DS3231_ALARM1_MIN_SHIFT) +# define DS3231_ALARM1_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ +# define DS3231_ALARM1_10MIN_MASK (7 << DS3231_ALARM1_10MIN_SHIFT) +# define DS3231_ALARM1_10MIN(n) ((uint8_t)(n) << DS3231_ALARM1_10MIN_SHIFT) +# define DS3231_ALARM1_MIN_BCDMASK (DS3231_ALARM1_MIN_MASK | DS3231_ALARM1_10MIN_MASK) +# define DS3231_ALARM1_A1M2_SHIFT 7 /* Bits 7: A1M2 mask */ +# define DS3231_ALARM1_A1M2_MASK (1 << DS3231_ALARM1_A1M2_SHIFT) +# define DS3231_ALARM1_A1M2(n) ((uint8_t)(n) << DS3231_ALARM1_A1M2_SHIFT) -#define DS3231_ALARM1_DAYDATER 0x0a /* Alarm1 date / day of the week register */ -# define DS3231_ALARM1_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ -# define DS3231_ALARM1_DAY_MASK (7 << DS3231_ALARM1_DAY_SHIFT) -# define DS3231_ALARM1_DAY(n) ((uint8_t)(n) << DS3231_ALARM1_DAY_SHIFT) -# define DS3231_ALARM1_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ -# define DS3231_ALARM1_DATE_MASK (15 << DS3231_ALARM1_DATE_SHIFT) -# define DS3231_ALARM1_DATE(n) ((uint8_t)(n) << DS3231_ALARM1_DATE_SHIFT) -# define DS3231_ALARM1_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ -# define DS3231_ALARM1_10DATE_MASK (3 << DS3231_ALARM1_10DATE_SHIFT) -# define DS3231_ALARM1_10DATE(n) ((uint8_t)(n) << DS3231_ALARM1_10DATE_SHIFT) -# define DS3231_ALARM1_DATE_BCDMASK (DS3231_ALARM1_DATE_MASK | DS3231_ALARM1_10DATE_MASK) -# define DS3231_ALARM1_DYDT_SHIFT 6 /* Bits 6: DY/DT */ -# define DS3231_ALARM1_DYDT_MASK (1 << DS3231_ALARM1_DYDT_SHIFT) -# define DS3231_ALARM1_DYDT_DATE ((uint8_t)(0) << DS3231_ALARM1_DYDT_SHIFT) -# define DS3231_ALARM1_DYDT_DAY ((uint8_t)(1) << DS3231_ALARM1_DYDT_SHIFT) -# define DS3231_ALARM1_A1M4_SHIFT 7 /* Bits 7: A1M4 mask */ -# define DS3231_ALARM1_A1M4_MASK (1 << DS3231_ALARM1_A1M4_SHIFT) -# define DS3231_ALARM1_A1M4(n) ((uint8_t)(n) << DS3231_ALARM1_A1M4_SHIFT) +# define DS3231_ALARM1_HOURR 0x09 /* Alarm1 hours register */ +# define DS3231_ALARM1_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ +# define DS3231_ALARM1_HOUR_MASK (15 << DS3231_ALARM1_HOUR_SHIFT) +# define DS3231_ALARM1_HOUR(n) ((uint8_t)(n) << DS3231_ALARM1_HOUR_SHIFT) +# define DS3231_ALARM1_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ +# define DS3231_ALARM1_10HOUR12_MASK (1 << DS3231_ALARM1_10HOUR12_SHIFT) +# define DS3231_ALARM1_10HOUR12(n) ((uint8_t)(n) << DS3231_ALARM1_10HOUR12_SHIFT) +# define DS3231_ALARM1_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ +# define DS3231_ALARM1_10HOUR24_MASK (3 << DS3231_ALARM1_10HOUR24_SHIFT) +# define DS3231_ALARM1_10HOUR24(n) ((uint8_t)(n) << DS3231_ALARM1_10HOUR24_SHIFT) +# define DS3231_ALARM1_HOUR12_BCDMASK (DS3231_ALARM1_HOUR_MASK | DS3231_ALARM1_10HOUR12_MASK) +# define DS3231_ALARM1_HOUR24_BCDMASK (DS3231_ALARM1_HOUR_MASK | DS3231_ALARM1_10HOUR24_MASK) +# define DS3231_ALARM1_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ +# define DS3231_ALARM1_AMPM_MASK (1 << DS3231_ALARM1_AMPM_SHIFT) +# define DS3231_ALARM1_AM ((uint8_t)(0) << DS3231_ALARM1_AMPM_SHIFT) +# define DS3231_ALARM1_PM ((uint8_t)(1) << DS3231_ALARM1_AMPM_SHIFT) +# define DS3231_ALARM1_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ +# define DS3231_ALARM1_1224_MASK (1 << DS3231_ALARM1_1224_SHIFT) +# define DS3231_ALARM1_12 ((uint8_t)(0) << DS3231_ALARM1_1224_SHIFT) +# define DS3231_ALARM1_24 ((uint8_t)(1) << DS3231_ALARM1_1224_SHIFT) +# define DS3231_ALARM1_A1M3_SHIFT 7 /* Bits 7: A1M3 mask */ +# define DS3231_ALARM1_A1M3_MASK (1 << DS3231_ALARM1_A1M3_SHIFT) +# define DS3231_ALARM1_A1M3(n) ((uint8_t)(n) << DS3231_ALARM1_A1M3_SHIFT) -#define DS3231_ALARM2_MINR 0x0b /* Alarm2 minutes register */ -# define DS3231_ALARM2_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ -# define DS3231_ALARM2_MIN_MASK (15 << DS3231_ALARM2_MIN_SHIFT) -# define DS3231_ALARM2_MIN(n) ((uint8_t)(n) << DS3231_ALARM2_MIN_SHIFT) -# define DS3231_ALARM2_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ -# define DS3231_ALARM2_10MIN_MASK (7 << DS3231_ALARM2_10MIN_SHIFT) -# define DS3231_ALARM2_10MIN(n) ((uint8_t)(n) << DS3231_ALARM2_10MIN_SHIFT) -# define DS3231_ALARM2_MIN_BCDMASK (DS3231_ALARM2_MIN_MASK | DS3231_ALARM2_10MIN_MASK) -# define DS3231_ALARM2_A2M2_SHIFT 7 /* Bits 7: A2M2 mask */ -# define DS3231_ALARM2_A2M2_MASK (1 << DS3231_ALARM2_A2M2_SHIFT) -# define DS3231_ALARM2_A2M2(n) ((uint8_t)(n) << DS3231_ALARM2_A2M2_SHIFT) +# define DS3231_ALARM1_DAYDATER 0x0a /* Alarm1 date / day of the week register */ +# define DS3231_ALARM1_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ +# define DS3231_ALARM1_DAY_MASK (7 << DS3231_ALARM1_DAY_SHIFT) +# define DS3231_ALARM1_DAY(n) ((uint8_t)(n) << DS3231_ALARM1_DAY_SHIFT) +# define DS3231_ALARM1_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ +# define DS3231_ALARM1_DATE_MASK (15 << DS3231_ALARM1_DATE_SHIFT) +# define DS3231_ALARM1_DATE(n) ((uint8_t)(n) << DS3231_ALARM1_DATE_SHIFT) +# define DS3231_ALARM1_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ +# define DS3231_ALARM1_10DATE_MASK (3 << DS3231_ALARM1_10DATE_SHIFT) +# define DS3231_ALARM1_10DATE(n) ((uint8_t)(n) << DS3231_ALARM1_10DATE_SHIFT) +# define DS3231_ALARM1_DATE_BCDMASK (DS3231_ALARM1_DATE_MASK | DS3231_ALARM1_10DATE_MASK) +# define DS3231_ALARM1_DYDT_SHIFT 6 /* Bits 6: DY/DT */ +# define DS3231_ALARM1_DYDT_MASK (1 << DS3231_ALARM1_DYDT_SHIFT) +# define DS3231_ALARM1_DYDT_DATE ((uint8_t)(0) << DS3231_ALARM1_DYDT_SHIFT) +# define DS3231_ALARM1_DYDT_DAY ((uint8_t)(1) << DS3231_ALARM1_DYDT_SHIFT) +# define DS3231_ALARM1_A1M4_SHIFT 7 /* Bits 7: A1M4 mask */ +# define DS3231_ALARM1_A1M4_MASK (1 << DS3231_ALARM1_A1M4_SHIFT) +# define DS3231_ALARM1_A1M4(n) ((uint8_t)(n) << DS3231_ALARM1_A1M4_SHIFT) -#define DS3231_ALARM2_HOURR 0x0c /* Alarm2 hours register */ -# define DS3231_ALARM2_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ -# define DS3231_ALARM2_HOUR_MASK (15 << DS3231_ALARM2_HOUR_SHIFT) -# define DS3231_ALARM2_HOUR(n) ((uint8_t)(n) << DS3231_ALARM2_HOUR_SHIFT) -# define DS3231_ALARM2_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ -# define DS3231_ALARM2_10HOUR12_MASK (1 << DS3231_ALARM2_10HOUR12_SHIFT) -# define DS3231_ALARM2_10HOUR12(n) ((uint8_t)(n) << DS3231_ALARM2_10HOUR12_SHIFT) -# define DS3231_ALARM2_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ -# define DS3231_ALARM2_10HOUR24_MASK (3 << DS3231_ALARM2_10HOUR24_SHIFT) -# define DS3231_ALARM2_10HOUR24(n) ((uint8_t)(n) << DS3231_ALARM2_10HOUR24_SHIFT) -# define DS3231_ALARM2_HOUR12_BCDMASK (DS3231_ALARM2_HOUR_MASK | DS3231_ALARM2_10HOUR12_MASK) -# define DS3231_ALARM2_HOUR24_BCDMASK (DS3231_ALARM2_HOUR_MASK | DS3231_ALARM2_10HOUR24_MASK) -# define DS3231_ALARM2_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ -# define DS3231_ALARM2_AMPM_MASK (1 << DS3231_ALARM2_AMPM_SHIFT) -# define DS3231_ALARM2_AM ((uint8_t)(0) << DS3231_ALARM2_AMPM_SHIFT) -# define DS3231_ALARM2_PM ((uint8_t)(1) << DS3231_ALARM2_AMPM_SHIFT) -# define DS3231_ALARM2_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ -# define DS3231_ALARM2_1224_MASK (1 << DS3231_ALARM2_1224_SHIFT) -# define DS3231_ALARM2_12 ((uint8_t)(0) << DS3231_ALARM2_1224_SHIFT) -# define DS3231_ALARM2_24 ((uint8_t)(1) << DS3231_ALARM2_1224_SHIFT) -# define DS3231_ALARM2_A2M3_SHIFT 7 /* Bits 7: A2M3 mask */ -# define DS3231_ALARM2_A2M3_MASK (1 << DS3231_ALARM2_A2M3_SHIFT) -# define DS3231_ALARM2_A2M3(n) ((uint8_t)(n) << DS3231_ALARM2_A2M3_SHIFT) +# define DS3231_ALARM2_MINR 0x0b /* Alarm2 minutes register */ +# define DS3231_ALARM2_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ +# define DS3231_ALARM2_MIN_MASK (15 << DS3231_ALARM2_MIN_SHIFT) +# define DS3231_ALARM2_MIN(n) ((uint8_t)(n) << DS3231_ALARM2_MIN_SHIFT) +# define DS3231_ALARM2_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ +# define DS3231_ALARM2_10MIN_MASK (7 << DS3231_ALARM2_10MIN_SHIFT) +# define DS3231_ALARM2_10MIN(n) ((uint8_t)(n) << DS3231_ALARM2_10MIN_SHIFT) +# define DS3231_ALARM2_MIN_BCDMASK (DS3231_ALARM2_MIN_MASK | DS3231_ALARM2_10MIN_MASK) +# define DS3231_ALARM2_A2M2_SHIFT 7 /* Bits 7: A2M2 mask */ +# define DS3231_ALARM2_A2M2_MASK (1 << DS3231_ALARM2_A2M2_SHIFT) +# define DS3231_ALARM2_A2M2(n) ((uint8_t)(n) << DS3231_ALARM2_A2M2_SHIFT) -#define DS3231_ALARM2_DAYDATER 0x0d /* Alarm2 date / day of the week register */ -# define DS3231_ALARM2_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ -# define DS3231_ALARM2_DAY_MASK (7 << DS3231_ALARM2_DAY_SHIFT) -# define DS3231_ALARM2_DAY(n) ((uint8_t)(n) << DS3231_ALARM2_DAY_SHIFT) -# define DS3231_ALARM2_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ -# define DS3231_ALARM2_DATE_MASK (15 << DS3231_ALARM2_DATE_SHIFT) -# define DS3231_ALARM2_DATE(n) ((uint8_t)(n) << DS3231_ALARM2_DATE_SHIFT) -# define DS3231_ALARM2_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ -# define DS3231_ALARM2_10DATE_MASK (3 << DS3231_ALARM2_10DATE_SHIFT) -# define DS3231_ALARM2_10DATE(n) ((uint8_t)(n) << DS3231_ALARM2_10DATE_SHIFT) -# define DS3231_ALARM2_DATE_BCDMASK (DS3231_ALARM2_DATE_MASK | DS3231_ALARM2_10DATE_MASK) -# define DS3231_ALARM2_DYDT_SHIFT 6 /* Bits 6: DY/DT */ -# define DS3231_ALARM2_DYDT_MASK (1 << DS3231_ALARM2_DYDT_SHIFT) -# define DS3231_ALARM2_DYDT_DATE ((uint8_t)(0) << DS3231_ALARM2_DYDT_SHIFT) -# define DS3231_ALARM2_DYDT_DAY ((uint8_t)(1) << DS3231_ALARM2_DYDT_SHIFT) -# define DS3231_ALARM2_A2M4_SHIFT 7 /* Bits 7: A2M4 mask */ -# define DS3231_ALARM2_A2M4_MASK (1 << DS3231_ALARM2_A2M4_SHIFT) -# define DS3231_ALARM2_A2M4(n) ((uint8_t)(n) << DS3231_ALARM2_A2M4_SHIFT) +# define DS3231_ALARM2_HOURR 0x0c /* Alarm2 hours register */ +# define DS3231_ALARM2_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ +# define DS3231_ALARM2_HOUR_MASK (15 << DS3231_ALARM2_HOUR_SHIFT) +# define DS3231_ALARM2_HOUR(n) ((uint8_t)(n) << DS3231_ALARM2_HOUR_SHIFT) +# define DS3231_ALARM2_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ +# define DS3231_ALARM2_10HOUR12_MASK (1 << DS3231_ALARM2_10HOUR12_SHIFT) +# define DS3231_ALARM2_10HOUR12(n) ((uint8_t)(n) << DS3231_ALARM2_10HOUR12_SHIFT) +# define DS3231_ALARM2_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ +# define DS3231_ALARM2_10HOUR24_MASK (3 << DS3231_ALARM2_10HOUR24_SHIFT) +# define DS3231_ALARM2_10HOUR24(n) ((uint8_t)(n) << DS3231_ALARM2_10HOUR24_SHIFT) +# define DS3231_ALARM2_HOUR12_BCDMASK (DS3231_ALARM2_HOUR_MASK | DS3231_ALARM2_10HOUR12_MASK) +# define DS3231_ALARM2_HOUR24_BCDMASK (DS3231_ALARM2_HOUR_MASK | DS3231_ALARM2_10HOUR24_MASK) +# define DS3231_ALARM2_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ +# define DS3231_ALARM2_AMPM_MASK (1 << DS3231_ALARM2_AMPM_SHIFT) +# define DS3231_ALARM2_AM ((uint8_t)(0) << DS3231_ALARM2_AMPM_SHIFT) +# define DS3231_ALARM2_PM ((uint8_t)(1) << DS3231_ALARM2_AMPM_SHIFT) +# define DS3231_ALARM2_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ +# define DS3231_ALARM2_1224_MASK (1 << DS3231_ALARM2_1224_SHIFT) +# define DS3231_ALARM2_12 ((uint8_t)(0) << DS3231_ALARM2_1224_SHIFT) +# define DS3231_ALARM2_24 ((uint8_t)(1) << DS3231_ALARM2_1224_SHIFT) +# define DS3231_ALARM2_A2M3_SHIFT 7 /* Bits 7: A2M3 mask */ +# define DS3231_ALARM2_A2M3_MASK (1 << DS3231_ALARM2_A2M3_SHIFT) +# define DS3231_ALARM2_A2M3(n) ((uint8_t)(n) << DS3231_ALARM2_A2M3_SHIFT) -#define DS3231_CR 0x0e /* Control register */ -# define DS3231_CR_A1IE (1 << 0) /* Bit 0: Alarm 1 interrupt enable */ -# define DS3231_CR_A2IE (1 << 1) /* Bit 1: Alarm 2 interrupt enable */ -# define DS3231_CR_INTCN (1 << 2) /* Bit 2: Interrupt control */ -# define DS3231_CR_RS_SHIFT (3) /* Bit 3-4: Rate selection */ -# define DS3231_CR_RS_MASK (3 << DS3231_CR_RS_SHIFT) -# define DS3231_CR_RS_1HZ (0 << DS3231_CR_RS_SHIFT) /* 1Hz */ -# define DS3231_CR_RS_1KHZ (1 << DS3231_CR_RS_SHIFT) /* 1.024kHz */ -# define DS3231_CR_RS_4KHZ (2 << DS3231_CR_RS_SHIFT) /* 4.096kHz */ -# define DS3231_CR_RS_8KHZ (3 << DS3231_CR_RS_SHIFT) /* 8.192kHz */ -# define DS3231_CR_CONV (1 << 5) /* Bit 5: Convert temperature */ -# define DS3231_CR_BBSQW (1 << 6) /* Bit 6: Battery backed square wave enable */ -# define DS3231_CR_EOSC (1 << 7) /* Bit 7: Enable oscillator */ +# define DS3231_ALARM2_DAYDATER 0x0d /* Alarm2 date / day of the week register */ +# define DS3231_ALARM2_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ +# define DS3231_ALARM2_DAY_MASK (7 << DS3231_ALARM2_DAY_SHIFT) +# define DS3231_ALARM2_DAY(n) ((uint8_t)(n) << DS3231_ALARM2_DAY_SHIFT) +# define DS3231_ALARM2_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ +# define DS3231_ALARM2_DATE_MASK (15 << DS3231_ALARM2_DATE_SHIFT) +# define DS3231_ALARM2_DATE(n) ((uint8_t)(n) << DS3231_ALARM2_DATE_SHIFT) +# define DS3231_ALARM2_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ +# define DS3231_ALARM2_10DATE_MASK (3 << DS3231_ALARM2_10DATE_SHIFT) +# define DS3231_ALARM2_10DATE(n) ((uint8_t)(n) << DS3231_ALARM2_10DATE_SHIFT) +# define DS3231_ALARM2_DATE_BCDMASK (DS3231_ALARM2_DATE_MASK | DS3231_ALARM2_10DATE_MASK) +# define DS3231_ALARM2_DYDT_SHIFT 6 /* Bits 6: DY/DT */ +# define DS3231_ALARM2_DYDT_MASK (1 << DS3231_ALARM2_DYDT_SHIFT) +# define DS3231_ALARM2_DYDT_DATE ((uint8_t)(0) << DS3231_ALARM2_DYDT_SHIFT) +# define DS3231_ALARM2_DYDT_DAY ((uint8_t)(1) << DS3231_ALARM2_DYDT_SHIFT) +# define DS3231_ALARM2_A2M4_SHIFT 7 /* Bits 7: A2M4 mask */ +# define DS3231_ALARM2_A2M4_MASK (1 << DS3231_ALARM2_A2M4_SHIFT) +# define DS3231_ALARM2_A2M4(n) ((uint8_t)(n) << DS3231_ALARM2_A2M4_SHIFT) -#define DS3231_CSR 0x0f /* Control/status register */ -# define DS3231_CSR_A1F (1 << 0) /* Bit 0: Alarm 1 flag */ -# define DS3231_CSR_A2F (1 << 1) /* Bit 1: Alarm 2 flag */ -# define DS3231_CSR_BSY (1 << 2) /* Bit 2: Busy */ -# define DS3231_CSR_EN32kHz (1 << 3) /* Bit 3: Enable 32kHz output */ -# define DS3231_CSR_OSF (1 << 7) /* Bit 7: Oscillator stop flag */ +# define DS3231_CR 0x0e /* Control register */ +# define DS3231_CR_A1IE (1 << 0) /* Bit 0: Alarm 1 interrupt enable */ +# define DS3231_CR_A2IE (1 << 1) /* Bit 1: Alarm 2 interrupt enable */ +# define DS3231_CR_INTCN (1 << 2) /* Bit 2: Interrupt control */ +# define DS3231_CR_RS_SHIFT (3) /* Bits 3-4: Rate selection */ +# define DS3231_CR_RS_MASK (3 << DS3231_CR_RS_SHIFT) +# define DS3231_CR_RS_1HZ (0 << DS3231_CR_RS_SHIFT) /* 1Hz */ +# define DS3231_CR_RS_1KHZ (1 << DS3231_CR_RS_SHIFT) /* 1.024kHz */ +# define DS3231_CR_RS_4KHZ (2 << DS3231_CR_RS_SHIFT) /* 4.096kHz */ +# define DS3231_CR_RS_8KHZ (3 << DS3231_CR_RS_SHIFT) /* 8.192kHz */ +# define DS3231_CR_CONV (1 << 5) /* Bit 5: Convert temperature */ +# define DS3231_CR_BBSQW (1 << 6) /* Bit 6: Battery backed square wave enable */ +# define DS3231_CR_EOSC (1 << 7) /* Bit 7: Enable oscillator */ -#define DS3231_AGINGR 0x10 /* Aging offset register (8-bit, 2's complement) */ +# define DS3231_CSR 0x0f /* Control/status register */ +# define DS3231_CSR_A1F (1 << 0) /* Bit 0: Alarm 1 flag */ +# define DS3231_CSR_A2F (1 << 1) /* Bit 1: Alarm 2 flag */ +# define DS3231_CSR_BSY (1 << 2) /* Bit 2: Busy */ +# define DS3231_CSR_EN32kHz (1 << 3) /* Bit 3: Enable 32kHz output */ +# define DS3231_CSR_OSF (1 << 7) /* Bit 7: Oscillator stop flag */ -#define DS3231_TMPMR 0x11 /* MSB of temp register (8-bit, 2's complement) */ +# define DS3231_AGINGR 0x10 /* Aging offset register (8-bit, 2's complement) */ -#define DS3231_TMPLR 0x12 /* LSB of temp register (2-bits) */ -# define DS3231_TMPLR_MASK 0xc0 /* Bits 6-7: LSB of temp register (2-bits) */ +# define DS3231_TMPMR 0x11 /* MSB of temp register (8-bit, 2's complement) */ + +# define DS3231_TMPLR 0x12 /* LSB of temp register (2-bits) */ +# define DS3231_TMPLR_MASK 0xc0 /* Bits 6-7: LSB of temp register (2-bits) */ +#endif #endif /* __DRIVERS_TIMERS_DS3231_H */ diff --git a/include/nuttx/timers/ds3231.h b/include/nuttx/timers/ds3231.h index 98bf8bbb20c..1dec1ab7dfb 100644 --- a/include/nuttx/timers/ds3231.h +++ b/include/nuttx/timers/ds3231.h @@ -42,7 +42,7 @@ #include -#ifdef CONFIG_RTC_DS3231 +#ifdef CONFIG_RTC_DS3XXX /**************************************************************************** * Public Function Prototypes @@ -57,13 +57,13 @@ extern "C" #endif /************************************************************************************ - * Name: ds3231_rtc_initialize + * Name: ds3xxx_rtc_initialize * * Description: * Initialize the hardware RTC per the selected configuration. This function is * called once during the OS initialization sequence by board-specific logic. * - * After ds3231_rtc_initialize() is called, the OS function clock_synchronize() + * After ds3xxx_rtc_initialize() is called, the OS function clock_synchronize() * should also be called to synchronize the system timer to a hardware RTC. That * operation is normally performed automatically by the system during clock * initialization. However, when an external RTC is used, the board logic will @@ -79,12 +79,12 @@ extern "C" ************************************************************************************/ struct i2c_dev_s; /* Forward reference */ -int ds3231_rtc_initialize(FAR struct i2c_dev_s *i2c); +int ds3xxx_rtc_initialize(FAR struct i2c_dev_s *i2c); #undef EXTERN #ifdef __cplusplus } #endif -#endif /* CONFIG_RTC_DS3231 */ +#endif /* CONFIG_RTC_DS3XXX */ #endif /* __INCLUDE_NUTTX_TIMERS_DS3231_H */