From 5ec95ef35ec8fcbed13efe52d27f63bac4dc0b13 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Wed, 21 Dec 2022 10:56:20 +0100 Subject: [PATCH] drivers: regulator: npm6001: add support for get_mode Allow to query operating mode on each BUCK converter (PWM or Hysteretic). Signed-off-by: Gerard Marull-Paretas --- drivers/regulator/regulator_npm6001.c | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/regulator/regulator_npm6001.c b/drivers/regulator/regulator_npm6001.c index 5a155450582..58780426ce5 100644 --- a/drivers/regulator/regulator_npm6001.c +++ b/drivers/regulator/regulator_npm6001.c @@ -448,6 +448,42 @@ static int regulator_npm6001_set_mode(const struct device *dev, mode << NPM6001_BUCKXCONFPWMMODE_SETFORCEPWM_POS); } +static int regulator_npm6001_get_mode(const struct device *dev, + regulator_mode_t *mode) +{ + const struct regulator_npm6001_config *config = dev->config; + const struct regulator_npm6001_pconfig *pconfig = config->p->config; + uint8_t conf_reg, conf; + int ret; + + switch (config->source) { + case NPM6001_SOURCE_BUCK0: + conf_reg = NPM6001_BUCK0CONFPWMMODE; + break; + case NPM6001_SOURCE_BUCK1: + conf_reg = NPM6001_BUCK1CONFPWMMODE; + break; + case NPM6001_SOURCE_BUCK2: + conf_reg = NPM6001_BUCK2CONFPWMMODE; + break; + case NPM6001_SOURCE_BUCK3: + conf_reg = NPM6001_BUCK3CONFPWMMODE; + break; + default: + return -ENOTSUP; + } + + ret = i2c_reg_read_byte_dt(&pconfig->i2c, conf_reg, &conf); + if (ret < 0) { + return ret; + } + + *mode = (conf & NPM6001_BUCKXCONFPWMMODE_SETFORCEPWM_MSK) >> + NPM6001_BUCKXCONFPWMMODE_SETFORCEPWM_POS; + + return 0; +} + static int regulator_npm6001_enable(const struct device *dev) { const struct regulator_npm6001_config *config = dev->config; @@ -610,6 +646,7 @@ static const struct regulator_driver_api api = { .set_voltage = regulator_npm6001_set_voltage, .get_voltage = regulator_npm6001_get_voltage, .set_mode = regulator_npm6001_set_mode, + .get_mode = regulator_npm6001_get_mode, .get_error_flags = regulator_npm6001_get_error_flags, };