Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
rv3032.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Baylibre SAS
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_RV3032_H_
8#define ZEPHYR_INCLUDE_DRIVERS_MFD_RV3032_H_
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include <stddef.h>
15#include <stdint.h>
16
17#include <zephyr/device.h>
18
19/* RV3032 RAM register addresses */
20#define RV3032_REG_100TH_SECONDS 0x00
21#define RV3032_REG_SECONDS 0x01
22#define RV3032_REG_MINUTES 0x02
23#define RV3032_REG_HOURS 0x03
24#define RV3032_REG_WEEKDAY 0x04
25#define RV3032_REG_DATE 0x05
26#define RV3032_REG_MONTH 0x06
27#define RV3032_REG_YEAR 0x07
28#define RV3032_REG_ALARM_MINUTES 0x08
29#define RV3032_REG_ALARM_HOURS 0x09
30#define RV3032_REG_ALARM_DATE 0x0A
31#define RV3032_REG_TIMER_VALUE_0 0x0B
32#define RV3032_REG_TIMER_VALUE_1 0x0C
33#define RV3032_REG_STATUS 0x0D
34#define RV3032_REG_TEMPERATURE_LSB 0x0E
35#define RV3032_REG_TEMPERATURE_MSB 0x0F
36#define RV3032_REG_CONTROL1 0x10
37#define RV3032_REG_CONTROL2 0x11
38#define RV3032_REG_CONTROL3 0x12
39#define RV3032_TS_CTRL 0x13
40#define RV3032_CLK_INT_MASK 0x14
41#define RV3032_EVI_CONTROL 0x15
42#define RV3032_REG_TEMP_LOW_THLD 0x16
43#define RV3032_REG_TEMP_HIGH_THLD 0x17
44
45/* EEPROM register addresses */
46#define RV3032_REG_EEPROM_ADDRESS 0x3D
47#define RV3032_REG_EEPROM_DATA 0x3E
48#define RV3032_REG_EEPROM_COMMAND 0x3F
49#define RV3032_REG_EEPROM_PMU 0xC0
50#define RV3032_REG_EEPROM_RAM1 0x40
51#define RV3032_REG_EEPROM_OFFSET 0xC1
52#define RV3032_REG_EEPROM_CLKOUT1 0xC2
53#define RV3032_REG_EEPROM_CLKOUT2 0xC3
54#define RV3032_REG_EEPROM_TREF0 0xC4
55#define RV3032_REG_EEPROM_TREF1 0xC5
56
57/* Registers masks and bits */
58#define RV3032_CONTROL1_TD GENMASK(1, 0)
59#define RV3032_CONTROL1_EERD BIT(2)
60#define RV3032_CONTROL1_TE BIT(3)
61#define RV3032_CONTROL1_USEL BIT(4)
62#define RV3032_CONTROL1_GP0 BIT(5)
63
64#define RV3032_CONTROL2_STOP BIT(0)
65#define RV3032_CONTROL2_GP1 BIT(1)
66#define RV3032_CONTROL2_EIE BIT(2)
67#define RV3032_CONTROL2_AIE BIT(3)
68#define RV3032_CONTROL2_TIE BIT(4)
69#define RV3032_CONTROL2_UIE BIT(5)
70#define RV3032_CONTROL2_CLKIE BIT(6)
71
72#define RV3032_CONTROL3_TLIE BIT(0)
73#define RV3032_CONTROL3_THIE BIT(1)
74#define RV3032_CONTROL3_TLE BIT(2)
75#define RV3032_CONTROL3_THE BIT(3)
76#define RV3032_CONTROL3_BSIE BIT(4)
77
78#define RV3032_100TH_SECONDS_MASK GENMASK(7, 0)
79#define RV3032_SECONDS_MASK GENMASK(6, 0)
80#define RV3032_MINUTES_MASK GENMASK(6, 0)
81#define RV3032_HOURS_AMPM BIT(5)
82#define RV3032_HOURS_12H_MASK GENMASK(4, 0)
83#define RV3032_HOURS_24H_MASK GENMASK(5, 0)
84#define RV3032_DATE_MASK GENMASK(5, 0)
85#define RV3032_WEEKDAY_MASK GENMASK(2, 0)
86#define RV3032_MONTH_MASK GENMASK(4, 0)
87#define RV3032_YEAR_MASK GENMASK(7, 0)
88
89#define RV3032_ALARM_MINUTES_AE_M BIT(7)
90#define RV3032_ALARM_MINUTES_MASK GENMASK(6, 0)
91#define RV3032_ALARM_HOURS_AE_H BIT(7)
92#define RV3032_ALARM_HOURS_AMPM BIT(5)
93#define RV3032_ALARM_HOURS_12H_MASK GENMASK(4, 0)
94#define RV3032_ALARM_HOURS_24H_MASK GENMASK(5, 0)
95#define RV3032_ALARM_DATE_AE_D BIT(7)
96#define RV3032_ALARM_DATE_MASK GENMASK(5, 0)
97
98#define RV3032_STATUS_VLF BIT(0)
99#define RV3032_STATUS_PORF BIT(1)
100#define RV3032_STATUS_EVF BIT(2)
101#define RV3032_STATUS_AF BIT(3)
102#define RV3032_STATUS_TF BIT(4)
103#define RV3032_STATUS_UF BIT(5)
104#define RV3032_STATUS_TLF BIT(6)
105#define RV3032_STATUS_THF BIT(7)
106
107#define RV3032_EEPROM_CLKOUT1_HFD_LOW GENMASK(7, 0)
108#define RV3032_TEMPERATURE_BSF BIT(0)
109#define RV3032_TEMPERATURE_CLKF BIT(1)
110#define RV3032_TEMPERATURE_EEBUSY BIT(2)
111#define RV3032_TEMPERATURE_EEF BIT(3)
112#define RV3032_TEMPERATURE_TEMP_LSB GENMASK(7, 4)
113
114#define RV3032_EEPROM_PMU_NCLKE BIT(6)
115#define RV3032_EEPROM_PMU_BSM GENMASK(5, 4)
116#define RV3032_EEPROM_PMU_TCR GENMASK(3, 2)
117#define RV3032_EEPROM_PMU_TCM GENMASK(1, 0)
118
119#define RV3032_EEPROM_CLKOUT2_OS BIT(7)
120#define RV3032_EEPROM_CLKOUT2_FD GENMASK(6, 5)
121#define RV3032_EEPROM_CLKOUT2_HFD_HIGH GENMASK(4, 0)
122
123/* The RV3032 only supports two-digit years. Leap years are correctly handled from 2000 to 2099 */
124#define RV3032_YEAR_OFFSET (2000 - 1900)
125
126/* The RV3032 enumerates months 1 to 12 */
127#define RV3032_MONTH_OFFSET 1
128
129typedef void (*child_isr_t)(const struct device *dev);
130
142
143int mfd_rv3032_read_regs(const struct device *dev, uint8_t addr, void *buf, size_t len);
144int mfd_rv3032_read_reg8(const struct device *dev, uint8_t addr, uint8_t *val);
145int mfd_rv3032_write_regs(const struct device *dev, uint8_t addr, void *buf, size_t len);
146int mfd_rv3032_write_reg8(const struct device *dev, uint8_t addr, uint8_t val);
147int mfd_rv3032_update_reg8(const struct device *dev, uint8_t addr, uint8_t mask, uint8_t val);
148void mfd_rv3032_set_irq_handler(const struct device *dev, const struct device *child_dev,
149 enum child_dev child_idx, child_isr_t handler);
150
151#define mfd_rv3032_set_status(dev, mask) mfd_rv3032_update_status(dev, mask, 0xff)
152#define mfd_rv3032_clear_status(dev, mask) mfd_rv3032_update_status(dev, mask, 0x00)
153
154int mfd_rv3032_update_status(const struct device *dev, uint8_t mask, uint8_t val);
155
156
157#ifdef __cplusplus
158}
159#endif
160
161#endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_RV3032_H_ */
child_dev
Child device of pca9422.
Definition pca9422.h:30
void(* child_isr_t)(const struct device *dev)
Definition nxp_lp_flexcomm.h:11
int mfd_rv3032_update_reg8(const struct device *dev, uint8_t addr, uint8_t mask, uint8_t val)
int mfd_rv3032_write_regs(const struct device *dev, uint8_t addr, void *buf, size_t len)
int mfd_rv3032_update_status(const struct device *dev, uint8_t mask, uint8_t val)
int mfd_rv3032_write_reg8(const struct device *dev, uint8_t addr, uint8_t val)
int mfd_rv3032_read_regs(const struct device *dev, uint8_t addr, void *buf, size_t len)
void mfd_rv3032_set_irq_handler(const struct device *dev, const struct device *child_dev, enum child_dev child_idx, child_isr_t handler)
int mfd_rv3032_read_reg8(const struct device *dev, uint8_t addr, uint8_t *val)
@ RV3032_DEV_COUNTER
Definition rv3032.h:138
@ RV3032_DEV_SENSOR
Definition rv3032.h:139
@ RV3032_DEV_REG
Definition rv3032.h:135
@ RV3032_DEV_RTC_ALARM
Definition rv3032.h:136
@ RV3032_DEV_MAX
Definition rv3032.h:140
@ RV3032_DEV_RTC_UPDATE
Definition rv3032.h:137
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:513