Line data Source code
1 0 : /*
2 : * Copyright 2025 NXP
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_PCA9422_H_
8 : #define ZEPHYR_INCLUDE_DRIVERS_MFD_PCA9422_H_
9 :
10 : #ifdef __cplusplus
11 : extern "C" {
12 : #endif
13 :
14 : /**
15 : * @defgroup mdf_interface_pca9422 MFD PCA9422 Interface
16 : * @ingroup mfd_interfaces
17 : * @{
18 : */
19 :
20 : #include <stddef.h>
21 : #include <stdint.h>
22 :
23 : #include <zephyr/device.h>
24 :
25 0 : typedef void (*child_isr_t)(const struct device *dev);
26 :
27 : /**
28 : * @brief Child device of pca9422
29 : */
30 0 : enum child_dev {
31 : PCA9422_DEV_REG = 0, /** Regulator */
32 : PCA9422_DEV_CHG, /** Charger */
33 : PCA9422_DEV_FG, /** Fuelgauge */
34 : PCA9422_DEV_MAX, /** Maximum number of child devices */
35 : };
36 :
37 : /**
38 : * @brief Set child interrupt handler of pca9422
39 : *
40 : * @param dev pca9422 mfd device
41 : * @param child_dev pca9422 child device
42 : * @param child_idx index in enum type of child device
43 : * @param handler interrupt handler of child device
44 : */
45 1 : void mfd_pca9422_set_irqhandler(const struct device *dev, const struct device *child_dev,
46 : enum child_dev child_idx, child_isr_t handler);
47 :
48 : /**
49 : * @brief Read multiple registers from pca9422
50 : *
51 : * @param dev pca9422 mfd device
52 : * @param reg Register start address
53 : * @param value Pointer that stores the received data
54 : * @param len Number of bytes to read
55 : * @retval 0 If successful
56 : * @retval -errno In case of any bus error (see i2c_burst_read_dt())
57 : */
58 1 : int mfd_pca9422_reg_burst_read(const struct device *dev, uint8_t reg, uint8_t *value, size_t len);
59 :
60 : /**
61 : * @brief Read single register from pca9422
62 : *
63 : * @param dev pca9422 mfd device
64 : * @param reg Register address
65 : * @param value Pointer that stores the received data
66 : * @retval 0 If successful
67 : * @retval -errno In case of any bus error (see i2c_reg_read_byte_dt())
68 : */
69 1 : int mfd_pca9422_reg_read_byte(const struct device *dev, uint8_t reg, uint8_t *value);
70 :
71 : /**
72 : * @brief Write multiple registers to pca9422
73 : *
74 : * @param dev pca9422 mfd device
75 : * @param reg Register start address
76 : * @param value Pointer that stores the write data
77 : * @param len Number of bytes to write
78 : * @retval 0 If successful
79 : * @retval -errno In case of any bus error (see i2c_burst_write_dt())
80 : */
81 1 : int mfd_pca9422_reg_burst_write(const struct device *dev, uint8_t reg, uint8_t *value, size_t len);
82 :
83 : /**
84 : * @brief Write single register to pca9422
85 : *
86 : * @param dev pca9422 mfd device
87 : * @param reg Register address
88 : * @param value data to write
89 : * @retval 0 If successful
90 : * @retval -errno In case of any bus error (see i2c_reg_write_byte_dt())
91 : */
92 1 : int mfd_pca9422_reg_write_byte(const struct device *dev, uint8_t reg, uint8_t value);
93 :
94 : /**
95 : * @brief Update selected bits in pca9422 register
96 : *
97 : * @param dev pca9422 mfd device
98 : * @param reg Register address
99 : * @param mask mask of bits to be modified
100 : * @param value data to write
101 : * @retval 0 If successful
102 : * @retval -errno In case of any bus error (see i2c_reg_update_byte_dt())
103 : */
104 1 : int mfd_pca9422_reg_update_byte(const struct device *dev, uint8_t reg, uint8_t mask, uint8_t value);
105 :
106 : /** @} */
107 :
108 : #ifdef __cplusplus
109 : }
110 : #endif
111 :
112 : #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_PCA9422_H_ */
|