/* * Copyright (c) 2023 Nordic Semiconductor ASA * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ #define ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ #ifdef __cplusplus extern "C" { #endif /** * @defgroup mdf_interface_npm1300 MFD NPM1300 Interface * @ingroup mfd_interfaces * @{ */ #include #include #include #include enum mfd_npm1300_event_t { NPM1300_EVENT_CHG_COMPLETED, NPM1300_EVENT_CHG_ERROR, NPM1300_EVENT_BATTERY_DETECTED, NPM1300_EVENT_BATTERY_REMOVED, NPM1300_EVENT_SHIPHOLD_PRESS, NPM1300_EVENT_SHIPHOLD_RELEASE, NPM1300_EVENT_WATCHDOG_WARN, NPM1300_EVENT_VBUS_DETECTED, NPM1300_EVENT_VBUS_REMOVED, NPM1300_EVENT_GPIO0_EDGE, NPM1300_EVENT_GPIO1_EDGE, NPM1300_EVENT_GPIO2_EDGE, NPM1300_EVENT_GPIO3_EDGE, NPM1300_EVENT_GPIO4_EDGE, NPM1300_EVENT_MAX }; /** * @brief Read multiple registers from npm1300 * * @param dev npm1300 mfd device * @param base Register base address (bits 15..8 of 16-bit address) * @param offset Register offset address (bits 7..0 of 16-bit address) * @param data Pointer to buffer for received data * @param len Number of bytes to read * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_read_dt()) */ int mfd_npm1300_reg_read_burst(const struct device *dev, uint8_t base, uint8_t offset, void *data, size_t len); /** * @brief Read single register from npm1300 * * @param dev npm1300 mfd device * @param base Register base address (bits 15..8 of 16-bit address) * @param offset Register offset address (bits 7..0 of 16-bit address) * @param data Pointer to buffer for received data * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_read_dt()) */ int mfd_npm1300_reg_read(const struct device *dev, uint8_t base, uint8_t offset, uint8_t *data); /** * @brief Write single register to npm1300 * * @param dev npm1300 mfd device * @param base Register base address (bits 15..8 of 16-bit address) * @param offset Register offset address (bits 7..0 of 16-bit address) * @param data data to write * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_dt()) */ int mfd_npm1300_reg_write(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data); /** * @brief Write two registers to npm1300 * * @param dev npm1300 mfd device * @param base Register base address (bits 15..8 of 16-bit address) * @param offset Register offset address (bits 7..0 of 16-bit address) * @param data1 first byte of data to write * @param data2 second byte of data to write * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_dt()) */ int mfd_npm1300_reg_write2(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data1, uint8_t data2); /** * @brief Update selected bits in npm1300 register * * @param dev npm1300 mfd device * @param base Register base address (bits 15..8 of 16-bit address) * @param offset Register offset address (bits 7..0 of 16-bit address) * @param data data to write * @param mask mask of bits to be modified * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_read_dt(), i2c_write_dt()) */ int mfd_npm1300_reg_update(const struct device *dev, uint8_t base, uint8_t offset, uint8_t data, uint8_t mask); /** * @brief Write npm1300 timer register * * @param dev npm1300 mfd device * @param time_ms timer value in ms * @retval 0 If successful * @retval -EINVAL if time value is too large * @retval -errno In case of any bus error (see i2c_write_dt()) */ int mfd_npm1300_set_timer(const struct device *dev, uint32_t time_ms); /** * @brief npm1300 full power reset * * @param dev npm1300 mfd device * @retval 0 If successful * @retval -errno In case of any bus error (see i2c_write_dt()) */ int mfd_npm1300_reset(const struct device *dev); /** * @brief npm1300 hibernate * * Enters low power state, and wakes after specified time * * @param dev npm1300 mfd device * @param time_ms timer value in ms * @retval 0 If successful * @retval -EINVAL if time value is too large * @retval -errno In case of any bus error (see i2c_write_dt()) */ int mfd_npm1300_hibernate(const struct device *dev, uint32_t time_ms); /** * @brief Add npm1300 event callback * * @param dev npm1300 mfd device * @param callback callback * @return 0 on success, -errno on failure */ int mfd_npm1300_add_callback(const struct device *dev, struct gpio_callback *callback); /** * @brief Remove npm1300 event callback * * @param dev npm1300 mfd device * @param callback callback * @return 0 on success, -errno on failure */ int mfd_npm1300_remove_callback(const struct device *dev, struct gpio_callback *callback); /** @} */ #ifdef __cplusplus } #endif #endif /* ZEPHYR_INCLUDE_DRIVERS_MFD_NPM1300_H_ */