diff mbox series

regulator: qcom-rpmh: Update ranges for FTSMPS525

Message ID 20241021230348.2632381-1-quic_molvera@quicinc.com (mailing list archive)
State Superseded
Headers show
Series regulator: qcom-rpmh: Update ranges for FTSMPS525 | expand

Commit Message

Melody Olvera Oct. 21, 2024, 11:03 p.m. UTC
The FTSMPS525 regulator has several potential ranges,
so update the ranges accordingly for SM8750.

Signed-off-by: Melody Olvera <quic_molvera@quicinc.com>
---
 drivers/regulator/qcom-rpmh-regulator.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)


base-commit: 63b3ff03d91ae8f875fe8747c781a521f78cde17

Comments

David Collins Oct. 23, 2024, 1:27 a.m. UTC | #1
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@quicinc.com>
> ---
>  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
Melody Olvera Oct. 23, 2024, 6:13 p.m. UTC | #2
On 10/22/2024 6:27 PM, David Collins wrote:
> 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@quicinc.com>
>> ---
>>   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.

Understood; I'll merge the lv and mv configs together as we discussed 
and update
the driver accordingly.

>
>> @@ -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.

Ack.

>
>>   	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
>
diff mbox series

Patch

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,
 };
@@ -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"),
 	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"),