From 49ef9be4b96323085ceb00483b8809ca3151585b Mon Sep 17 00:00:00 2001 From: Andy Sinclair Date: Thu, 24 Aug 2023 10:14:39 +0100 Subject: [PATCH] drivers: regulator: npm1300: Add PFM mode Set regulator mode updated to support forced PFM mode Signed-off-by: Andy Sinclair --- drivers/regulator/regulator_npm1300.c | 25 ++++++++++++++++--- .../zephyr/dt-bindings/regulator/npm1300.h | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/regulator/regulator_npm1300.c b/drivers/regulator/regulator_npm1300.c index ad52374466d..95c6b8a4d02 100644 --- a/drivers/regulator/regulator_npm1300.c +++ b/drivers/regulator/regulator_npm1300.c @@ -265,17 +265,34 @@ int regulator_npm1300_get_voltage(const struct device *dev, int32_t *volt_uv) static int set_buck_mode(const struct device *dev, uint8_t chan, regulator_mode_t mode) { const struct regulator_npm1300_config *config = dev->config; + uint8_t pfm_mask = BIT(chan); + uint8_t pfm_data; + uint8_t pwm_reg; + int ret; switch (mode) { case NPM1300_BUCK_MODE_PWM: - return mfd_npm1300_reg_write(config->mfd, BUCK_BASE, - BUCK_OFFSET_PWM_SET + (chan * 2U), 1U); + pfm_data = 0U; + pwm_reg = BUCK_OFFSET_PWM_SET; + break; case NPM1300_BUCK_MODE_AUTO: - return mfd_npm1300_reg_write(config->mfd, BUCK_BASE, - BUCK_OFFSET_PWM_CLR + (chan * 2U), 1U); + pfm_data = 0U; + pwm_reg = BUCK_OFFSET_PWM_CLR; + break; + case NPM1300_BUCK_MODE_PFM: + pfm_data = pfm_mask; + pwm_reg = BUCK_OFFSET_PWM_CLR; + break; default: return -ENOTSUP; } + + ret = mfd_npm1300_reg_update(config->mfd, BUCK_BASE, BUCK_OFFSET_CTRL0, pfm_data, pfm_mask); + if (ret < 0) { + return ret; + } + + return mfd_npm1300_reg_write(config->mfd, BUCK_BASE, pwm_reg + (chan * 2U), 1U); } static int set_ldsw_mode(const struct device *dev, uint8_t chan, regulator_mode_t mode) diff --git a/include/zephyr/dt-bindings/regulator/npm1300.h b/include/zephyr/dt-bindings/regulator/npm1300.h index 3293fe562d4..bf3f8cfa3ee 100644 --- a/include/zephyr/dt-bindings/regulator/npm1300.h +++ b/include/zephyr/dt-bindings/regulator/npm1300.h @@ -20,6 +20,7 @@ /* Buck modes */ #define NPM1300_BUCK_MODE_AUTO 0x00U #define NPM1300_BUCK_MODE_PWM 0x01U +#define NPM1300_BUCK_MODE_PFM 0x04U /* LDSW / LDO modes */ #define NPM1300_LDSW_MODE_LDO 0x02U