From 1526438a9305f98cdf6e40e5b73d8dd517c45636 Mon Sep 17 00:00:00 2001 From: Neha Malcom Francis Date: Tue, 21 Apr 2026 13:51:45 +0530 Subject: [PATCH] power: regulator: tps65941: Enable FPWM bits Depending on the phase selection (single or multi), the FPWM bits configured forces the regulator to operate in PWM mode. In case of multi-phase selection, the FPWM_MP bits enforce the regulator to also operate in multi-phase. This fixes correct multi-phase operation. While at this, correct incorrect macro alignment as well. Fixes: 065a452ae6a1 ("power: regulator: tps65941: add regulator support") Link: https://www.ti.com/lit/ds/symlink/tps6594-q1.pdf Signed-off-by: Keerthy Signed-off-by: Takuma Fujiwara Signed-off-by: Neha Malcom Francis Reviewed-by: Udit Kumar Signed-off-by: Peng Fan --- drivers/power/regulator/tps65941_regulator.c | 15 ++++++++++++--- include/power/tps65941.h | 4 +++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/power/regulator/tps65941_regulator.c b/drivers/power/regulator/tps65941_regulator.c index 2561d6f4c6c..209968b5718 100644 --- a/drivers/power/regulator/tps65941_regulator.c +++ b/drivers/power/regulator/tps65941_regulator.c @@ -63,13 +63,14 @@ static inline int tps65941_get_chip_id(struct udevice *dev) static int tps65941_buck_enable(struct udevice *dev, int op, bool *enable) { - int ret; + int ret, idx; unsigned int adr; struct dm_regulator_uclass_plat *uc_pdata; uc_pdata = dev_get_uclass_plat(dev); adr = uc_pdata->ctrl_reg; + idx = dev->driver_data; ret = pmic_reg_read(dev->parent, adr); if (ret < 0) return ret; @@ -84,10 +85,18 @@ static int tps65941_buck_enable(struct udevice *dev, int op, bool *enable) return 0; } else if (op == PMIC_OP_SET) { - if (*enable) + if (*enable) { ret |= TPS65941_BUCK_MODE_MASK; - else + /* Enable FPWM */ + ret |= TPS65941_BUCK_FPWM_MASK; + /* If Multiphase enable FPWM_MP */ + if (idx == TPS65941_BUCK_ID_12 || + idx == TPS65941_BUCK_ID_123 || + idx == TPS65941_BUCK_ID_1234) + ret |= TPS65941_BUCK_FPWM_MP_MASK; + } else { ret &= ~TPS65941_BUCK_MODE_MASK; + } ret = pmic_reg_write(dev->parent, adr, ret); if (ret) return ret; diff --git a/include/power/tps65941.h b/include/power/tps65941.h index a026ec56958..78e48a15972 100644 --- a/include/power/tps65941.h +++ b/include/power/tps65941.h @@ -19,7 +19,9 @@ #define TPS65941_BUCK_VOLT_MASK 0xFF #define TPS65941_BUCK_VOLT_MAX_HEX 0xFF #define TPS65941_BUCK_VOLT_MAX 3340000 -#define TPS65941_BUCK_MODE_MASK 0x1 +#define TPS65941_BUCK_MODE_MASK 0x1 +#define TPS65941_BUCK_FPWM_MASK 0x2 +#define TPS65941_BUCK_FPWM_MP_MASK 0x4 #define TPS65941_LDO_VOLT_MASK 0x7E #define TPS65941_LDO_VOLT_MAX_HEX 0x3A