blob: 4dd03fa2ec31e94f8c0972669eddf67057719de2 [file] [log] [blame]
/*
* 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 <stddef.h>
#include <stdint.h>
#include <zephyr/device.h>
#include <zephyr/drivers/gpio.h>
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_ */