On 10/21/24 16:03, Melody Olvera wrote: > The FTSMPS525 regulator has several potential ranges, > so update the ranges accordingly for SM8750. > > Signed-off-by: Melody Olvera <quic_molvera@xxxxxxxxxxx> > --- > drivers/regulator/qcom-rpmh-regulator.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c > index 6c343b4b9d15..272de7bc9c88 100644 > --- a/drivers/regulator/qcom-rpmh-regulator.c > +++ b/drivers/regulator/qcom-rpmh-regulator.c > @@ -848,9 +848,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { > .ops = &rpmh_regulator_vrm_ops, > .voltage_ranges = (struct linear_range[]) { > REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), > + REGULATOR_LINEAR_RANGE(1376000, 268, 438, 8000), > }, > - .n_linear_ranges = 1, > - .n_voltages = 268, > + .n_linear_ranges = 2, > + .n_voltages = 439, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > }; This configuration which specifies both LV and MV ranges should replace the pmic5_ftsmps525_lv and pmic5_ftsmps525_mv configurations. It should then be used in the per-PMIC data tables below. All FTSMPS525 type regulators physically support both LV and MV ranges. However, the per-regulator selection of which range is used can only be set by boot loader firmware and the configuration is locked in hardware after initialization. Unfortunately, the qcom-rpmh-regulator driver has no mechanism to determine at runtime if LV or MV range has been set for a particular regulator. Additionally, that exact same regulator in the same PMIC could be configured for the other range when used on a different board (where the power grid has different requirements). Listing support in a unified configuration for both LV and MV ranges fixes the situation as it will work on all boards regardless of firmware LV vs MV selection. This also accurately captures the capability of the regulator at a hardware level. > @@ -1196,6 +1197,8 @@ static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { > RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_lv, "vdd-s4"), > RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"), > RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_mv, "vdd-s6"), > + RPMH_VREG("smps7", "smp%s7", &pmic5_ftsmps525_lv, "vdd-s7"), > + RPMH_VREG("smps8", "smp%s8", &pmic5_ftsmps525_lv, "vdd-s8"), These lines should not be added. PMIC PM8550VS only has 6 FTSMPS525 regulators inside. > RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo515, "vdd-l1"), > RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo515, "vdd-l2"), > RPMH_VREG("ldo3", "ldo%s3", &pmic5_nldo515, "vdd-l3"), > @@ -1205,7 +1208,7 @@ static const struct rpmh_vreg_init_data pm8550vs_vreg_data[] = { > static const struct rpmh_vreg_init_data pm8550ve_vreg_data[] = { > RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps525_lv, "vdd-s1"), > RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps525_lv, "vdd-s2"), > - RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_lv, "vdd-s3"), > + RPMH_VREG("smps3", "smp%s3", &pmic5_ftsmps525_mv, "vdd-s3"), > RPMH_VREG("smps4", "smp%s4", &pmic5_ftsmps525_mv, "vdd-s4"), > RPMH_VREG("smps5", "smp%s5", &pmic5_ftsmps525_lv, "vdd-s5"), > RPMH_VREG("smps6", "smp%s6", &pmic5_ftsmps525_lv, "vdd-s6"), > > base-commit: 63b3ff03d91ae8f875fe8747c781a521f78cde17 Take care, David Collins