Line data Source code
1 0 : /* 2 : * Copyright (c) 2023 Nordic Semiconductor ASA 3 : * SPDX-License-Identifier: Apache-2.0 4 : */ 5 : 6 : #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ 7 : #define ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ 8 : 9 : #ifdef __cplusplus 10 : extern "C" { 11 : #endif 12 : 13 : /** 14 : * @defgroup mdf_interface_npm1300 MFD NPM1300 Interface 15 : * @ingroup mfd_interfaces 16 : * @{ 17 : */ 18 : 19 : #include <stddef.h> 20 : #include <stdint.h> 21 : 22 : #include <zephyr/device.h> 23 : #include <zephyr/drivers/gpio.h> 24 : 25 0 : enum mfd_npm1300_event_t { 26 : NPM1300_EVENT_CHG_COMPLETED, 27 : NPM1300_EVENT_CHG_ERROR, 28 : NPM1300_EVENT_BATTERY_DETECTED, 29 : NPM1300_EVENT_BATTERY_REMOVED, 30 : NPM1300_EVENT_SHIPHOLD_PRESS, 31 : NPM1300_EVENT_SHIPHOLD_RELEASE, 32 : NPM1300_EVENT_WATCHDOG_WARN, 33 : NPM1300_EVENT_VBUS_DETECTED, 34 : NPM1300_EVENT_VBUS_REMOVED, 35 : NPM1300_EVENT_GPIO0_EDGE, 36 : NPM1300_EVENT_GPIO1_EDGE, 37 : NPM1300_EVENT_GPIO2_EDGE, 38 : NPM1300_EVENT_GPIO3_EDGE, 39 : NPM1300_EVENT_GPIO4_EDGE, 40 : NPM1300_EVENT_MAX 41 : }; 42 : 43 : /** 44 : * @brief Read multiple registers from npm1300 45 : * 46 : * @param dev npm1300 mfd device 47 : * @param base Register base address (bits 15..8 of 16-bit address) 48 : * @param offset Register offset address (bits 7..0 of 16-bit address) 49 : * @param data Pointer to buffer for received data 50 : * @param len Number of bytes to read 51 : * @retval 0 If successful 52 : * @retval -errno In case of any bus error (see i2c_write_read_dt()) 53 : */ 54 1 : int mfd_npm1300_reg_read_burst(const struct device *dev, uint8_t base, uint8_t offset, void *data, 55 : size_t len); 56 : 57 : /** 58 : * @brief Read single register from npm1300 59 : * 60 : * @param dev npm1300 mfd device 61 : * @param base Register base address (bits 15..8 of 16-bit address) 62 : * @param offset Register offset address (bits 7..0 of 16-bit address) 63 : * @param data Pointer to buffer for received data 64 : * @retval 0 If successful 65 : * @retval -errno In case of any bus error (see i2c_write_read_dt()) 66 : */ 67 1 : int mfd_npm1300_reg_read(const struct device *dev, uint8_t base, uint8_t offset, uint8_t *data); 68 : 69 : /** 70 : * @brief Write single register to npm1300 71 : * 72 : * @param dev npm1300 mfd device 73 : * @param base Register base address (bits 15..8 of 16-bit address) 74 : * @param offset Register offset address (bits 7..0 of 16-bit address) 75 : * @param data data to write 76 : * @retval 0 If successful 77 : * @retval -errno In case of any bus error (see i2c_write_dt()) 78 : */ 79 1 : int mfd_npm1300_reg_write(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data); 80 : 81 : /** 82 : * @brief Write two registers to npm1300 83 : * 84 : * @param dev npm1300 mfd device 85 : * @param base Register base address (bits 15..8 of 16-bit address) 86 : * @param offset Register offset address (bits 7..0 of 16-bit address) 87 : * @param data1 first byte of data to write 88 : * @param data2 second byte of data to write 89 : * @retval 0 If successful 90 : * @retval -errno In case of any bus error (see i2c_write_dt()) 91 : */ 92 1 : int mfd_npm1300_reg_write2(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data1, 93 : uint8_t data2); 94 : 95 : /** 96 : * @brief Update selected bits in npm1300 register 97 : * 98 : * @param dev npm1300 mfd device 99 : * @param base Register base address (bits 15..8 of 16-bit address) 100 : * @param offset Register offset address (bits 7..0 of 16-bit address) 101 : * @param data data to write 102 : * @param mask mask of bits to be modified 103 : * @retval 0 If successful 104 : * @retval -errno In case of any bus error (see i2c_write_read_dt(), i2c_write_dt()) 105 : */ 106 1 : int mfd_npm1300_reg_update(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data, 107 : uint8_t mask); 108 : 109 : /** 110 : * @brief Write npm1300 timer register 111 : * 112 : * @param dev npm1300 mfd device 113 : * @param time_ms timer value in ms 114 : * @retval 0 If successful 115 : * @retval -EINVAL if time value is too large 116 : * @retval -errno In case of any bus error (see i2c_write_dt()) 117 : */ 118 1 : int mfd_npm1300_set_timer(const struct device *dev, uint32_t time_ms); 119 : 120 : /** 121 : * @brief npm1300 full power reset 122 : * 123 : * @param dev npm1300 mfd device 124 : * @retval 0 If successful 125 : * @retval -errno In case of any bus error (see i2c_write_dt()) 126 : */ 127 1 : int mfd_npm1300_reset(const struct device *dev); 128 : 129 : /** 130 : * @brief npm1300 hibernate 131 : * 132 : * Enters low power state, and wakes after specified time 133 : * 134 : * @param dev npm1300 mfd device 135 : * @param time_ms timer value in ms 136 : * @retval 0 If successful 137 : * @retval -EINVAL if time value is too large 138 : * @retval -errno In case of any bus error (see i2c_write_dt()) 139 : */ 140 1 : int mfd_npm1300_hibernate(const struct device *dev, uint32_t time_ms); 141 : 142 : /** 143 : * @brief Add npm1300 event callback 144 : * 145 : * @param dev npm1300 mfd device 146 : * @param callback callback 147 : * @return 0 on success, -errno on failure 148 : */ 149 1 : int mfd_npm1300_add_callback(const struct device *dev, struct gpio_callback *callback); 150 : 151 : /** 152 : * @brief Remove npm1300 event callback 153 : * 154 : * @param dev npm1300 mfd device 155 : * @param callback callback 156 : * @return 0 on success, -errno on failure 157 : */ 158 1 : int mfd_npm1300_remove_callback(const struct device *dev, struct gpio_callback *callback); 159 : 160 : /** @} */ 161 : 162 : #ifdef __cplusplus 163 : } 164 : #endif 165 : 166 : #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ */