1 /*
2  * Copyright (c) 2023 Grinn
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_AD559X_H_
7 #define ZEPHYR_INCLUDE_DRIVERS_MFD_AD559X_H_
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 #include <zephyr/device.h>
14 
15 #define AD559X_REG_SEQ_ADC        0x02U
16 #define AD559X_REG_GEN_CTRL       0x03U
17 #define AD559X_REG_ADC_CONFIG     0x04U
18 #define AD559X_REG_LDAC_EN        0x05U
19 #define AD559X_REG_GPIO_PULLDOWN  0x06U
20 #define AD559X_REG_READ_AND_LDAC  0x07U
21 #define AD559X_REG_GPIO_OUTPUT_EN 0x08U
22 #define AD559X_REG_GPIO_SET       0x09U
23 #define AD559X_REG_GPIO_INPUT_EN  0x0AU
24 #define AD559X_REG_PD_REF_CTRL    0x0BU
25 #define AD559X_REG_IO_TS_CONFIG   0x0DU
26 
27 #define AD559X_DAC_RANGE BIT(4)
28 #define AD559X_ADC_RANGE BIT(5)
29 #define AD559X_EN_REF    BIT(9)
30 
31 #define AD559X_PIN_MAX 8U
32 
33 /**
34  * @defgroup mdf_interface_ad559x MFD AD559X interface
35  * @ingroup mfd_interfaces
36  * @{
37  */
38 
39 /**
40  * @brief Check if the chip has a pointer byte map
41  *
42  * @param[in] dev Pointer to MFD device
43  *
44  * @retval true if chip has a pointer byte map, false if it has normal register map
45  */
46 bool mfd_ad559x_has_pointer_byte_map(const struct device *dev);
47 
48 /**
49  * @brief Read raw data from the chip
50  *
51  * @param[in] dev Pointer to MFD device
52  * @param[in] val Pointer to data buffer
53  * @param[in] len Number of bytes to be read
54  *
55  * @retval 0 if success
56  * @retval negative errno if failure
57  */
58 int mfd_ad559x_read_raw(const struct device *dev, uint8_t *val, size_t len);
59 
60 /**
61  * @brief Write raw data to chip
62  *
63  * @param[in] dev Pointer to MFD device
64  * @param[in] val Data to be written
65  * @param[in] len Number of bytes to be written
66  *
67  * @retval 0 if success
68  * @retval negative errno if failure
69  */
70 int mfd_ad559x_write_raw(const struct device *dev, uint8_t *val, size_t len);
71 
72 /**
73  * @brief Read data from provided register
74  *
75  * @param[in] dev Pointer to MFD device
76  * @param[in] reg Register to be read
77  * @param[in] reg_data Additional data passed to selected register
78  * @param[in] val Pointer to data buffer
79  *
80  * @retval 0 if success
81  * @retval negative errno if failure
82  */
83 int mfd_ad559x_read_reg(const struct device *dev, uint8_t reg, uint8_t reg_data, uint16_t *val);
84 
85 /**
86  * @brief Write data to provided register
87  *
88  * @param[in] dev Pointer to MFD device
89  * @param[in] reg Register to be written
90  * @param[in] val Data to be written
91  *
92  * @retval 0 if success
93  * @retval negative errno if failure
94  */
95 int mfd_ad559x_write_reg(const struct device *dev, uint8_t reg, uint16_t val);
96 
97 /**
98  * @brief Read ADC channel data from the chip
99  *
100  * @param[in] dev Pointer to MFD device
101  * @param[in] channel Channel to read
102  * @param[out] result ADC channel value read
103  *
104  * @retval 0 if success
105  * @retval negative errno if failure
106  */
107 int mfd_ad559x_read_adc_chan(const struct device *dev, uint8_t channel, uint16_t *result);
108 
109 /**
110  * @brief Write ADC channel data to the chip
111  *
112  * @param[in] dev Pointer to MFD device
113  * @param[in] channel Channel to write to
114  * @param[in] value DAC channel value
115  *
116  * @retval 0 if success
117  * @retval negative errno if failure
118  */
119 int mfd_ad559x_write_dac_chan(const struct device *dev, uint8_t channel, uint16_t value);
120 
121 /**
122  * @brief Read GPIO port from the chip
123  *
124  * @param[in] dev Pointer to MFD device
125  * @param[in] gpio GPIO to read
126  * @param[in] value DAC channel value
127  *
128  * @retval 0 if success
129  * @retval negative errno if failure
130  */
131 int mfd_ad559x_gpio_port_get_raw(const struct device *dev, uint8_t gpio, uint16_t *value);
132 /**
133  * @}
134  */
135 
136 #ifdef __cplusplus
137 }
138 #endif
139 
140 #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_AD559X_H_ */
141