Hi Udit On 11/02/25 23:21, Udit Kumar wrote: > As per TRM[0] Section 8.7.1 "TPS6594-Q1 Registers", LDOx_Vout > bit 6-1, define the NVM voltage settings. > Along side table 8-4 of above TRM, shows voltage to value mapping. > > Driver wrongly using bits 5-1 to calculate voltage, and to convert > voltage to value driver was using buck's calculation. > So fix those calculation. > > [0]: https://www.ti.com/lit/ds/symlink/tps6594-q1.pdf > Fixes: 5d7dbd22cf7d ("power: regulator: tps65941: use function callbacks for > conversion ops") > Signed-off-by: Udit Kumar <u-kum...@ti.com> > --- > Bootlogs > https://gist.github.com/uditkumarti/298bd277da11eb82146d7aff24c402ba > > drivers/power/regulator/tps65941_regulator.c | 16 +++++++++++++--- > include/power/tps65941.h | 3 ++- > 2 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/drivers/power/regulator/tps65941_regulator.c > b/drivers/power/regulator/tps65941_regulator.c > index bc4d153fd8..13f94b730d 100644 > --- a/drivers/power/regulator/tps65941_regulator.c > +++ b/drivers/power/regulator/tps65941_regulator.c > @@ -388,6 +388,14 @@ static int tps65941_ldo_enable(struct udevice *dev, int > op, bool *enable) > return 0; > } > > +static int tps65941_ldo_volt2val(__maybe_unused int idx, int uV) > +{ > + if (uV > TPS65941_LDO_VOLT_MAX || uV < TPS65941_LDO_VOLT_MIN) > + return -EINVAL; > + > + return ((uV - 600000) / 50000 + 0x4) << TPS65941_LDO_MODE_MASK; > +} > + > static int tps65941_ldo_val2volt(__maybe_unused int idx, int val) > { > if (val > TPS65941_LDO_VOLT_MAX_HEX || val < TPS65941_LDO_VOLT_MIN_HEX) > @@ -459,7 +467,7 @@ static int tps65224_ldo_val2volt(int idx, int val) > static const struct tps65941_reg_conv_ops ldo_conv_ops[] = { > [TPS65941_LDO_CONV_OPS_IDX] = { > .volt_mask = TPS65941_LDO_VOLT_MASK, > - .volt2val = tps65941_buck_volt2val, > + .volt2val = tps65941_ldo_volt2val, > .val2volt = tps65941_ldo_val2volt, > }, > [TPS65224_LDO_CONV_OPS_IDX] = { > @@ -472,7 +480,7 @@ static const struct tps65941_reg_conv_ops ldo_conv_ops[] > = { > static int tps65941_ldo_val(struct udevice *dev, int op, int *uV) > { > unsigned int hex, adr; > - int ret, ret_volt, idx; > + int ret, ret_volt, idx, ldo_bypass; > struct dm_regulator_uclass_plat *uc_pdata; > const struct tps65941_reg_conv_ops *conv_ops; > ulong chip_id; > @@ -502,7 +510,9 @@ static int tps65941_ldo_val(struct udevice *dev, int op, > int *uV) > if (ret < 0) > return ret; > > + ldo_bypass = ret & TPS65941_LDO_BYPASS_EN; > ret &= conv_ops->volt_mask; > + ret = ret >> TPS65941_LDO_MODE_MASK; > ret_volt = conv_ops->val2volt(idx, ret); > if (ret_volt < 0) > return ret_volt; > @@ -531,7 +541,7 @@ static int tps65941_ldo_val(struct udevice *dev, int op, > int *uV) > ret &= ~TPS65224_LDO_VOLT_MASK; > ret |= hex; > } else { > - ret = hex; > + ret = hex | ldo_bypass; > } > > ret = pmic_reg_write(dev->parent, adr, ret); > diff --git a/include/power/tps65941.h b/include/power/tps65941.h > index cec85333f0..a026ec5695 100644 > --- a/include/power/tps65941.h > +++ b/include/power/tps65941.h > @@ -21,10 +21,11 @@ > #define TPS65941_BUCK_VOLT_MAX 3340000 > #define TPS65941_BUCK_MODE_MASK 0x1 > > -#define TPS65941_LDO_VOLT_MASK 0x3E > +#define TPS65941_LDO_VOLT_MASK 0x7E > #define TPS65941_LDO_VOLT_MAX_HEX 0x3A > #define TPS65941_LDO_VOLT_MIN_HEX 0x4 > #define TPS65941_LDO_VOLT_MAX 3300000 > +#define TPS65941_LDO_VOLT_MIN 600000 > #define TPS65941_LDO_MODE_MASK 0x1 > #define TPS65941_LDO_BYPASS_EN 0x80 > #define TP65941_BUCK_CONF_SLEW_MASK 0x7
Reviewed-by: Neha Malcom Francis <n-fran...@ti.com> -- Thanking You Neha Malcom Francis