[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7c6c6343-a0f7-411f-aea4-c793317c164e@quicinc.com>
Date: Tue, 22 Oct 2024 18:27:27 -0700
From: David Collins <quic_collinsd@...cinc.com>
To: Melody Olvera <quic_molvera@...cinc.com>,
Liam Girdwood
<lgirdwood@...il.com>, Mark Brown <broonie@...nel.org>,
Trilok Soni
<quic_tsoni@...cinc.com>,
Satya Durga Srinivasu Prabhala
<quic_satyap@...cinc.com>
CC: <linux-arm-msm@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] regulator: qcom-rpmh: Update ranges for FTSMPS525
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@...cinc.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
Powered by blists - more mailing lists