* [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards
@ 2023-12-11 3:16 Fenglin Wu via B4 Relay
2023-12-11 3:16 ` [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges Fenglin Wu via B4 Relay
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Fenglin Wu via B4 Relay @ 2023-12-11 3:16 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood,
Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
kernel
Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree,
quic_collinsd, quic_subbaram, quic_jprakash, Fenglin Wu
There are 2 PM8010 PMICs present in sm8550-mtp/sm8550-qrd boards and
each of them exposes 7 LDOs. Add RPMH regulator support for them.
Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com>
---
Fenglin Wu (4):
regulator: qcom-rpmh: extend to support multiple linear voltage ranges
regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor
regulator: qcom-rpmh: add support for pm8010 regulators
arm64: dts: qcom: Add pm8010 regulators for sm8550 boards
.../bindings/regulator/qcom,rpmh-regulator.yaml | 14 ++
arch/arm64/boot/dts/qcom/sm8550-mtp.dts | 120 ++++++++++++++
arch/arm64/boot/dts/qcom/sm8550-qrd.dts | 120 ++++++++++++++
drivers/regulator/qcom-rpmh-regulator.c | 177 ++++++++++++++++++---
4 files changed, 405 insertions(+), 26 deletions(-)
---
base-commit: 753e4d5c433da57da75dd4c3e1aececc8e874a62
change-id: 20231205-pm8010-regulator-0348cb19087a
Best regards,
--
Fenglin Wu <quic_fenglinw@quicinc.com>
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges 2023-12-11 3:16 [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards Fenglin Wu via B4 Relay @ 2023-12-11 3:16 ` Fenglin Wu via B4 Relay 2023-12-12 2:44 ` David Collins 2023-12-11 3:17 ` [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor Fenglin Wu via B4 Relay ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Fenglin Wu via B4 Relay @ 2023-12-11 3:16 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash, Fenglin Wu From: Fenglin Wu <quic_fenglinw@quicinc.com> Update rpmh_vreg_hw_data to support multiple linear voltage ranges for potential regulators which have discrete voltage program ranges. Suggested-by: David Collins <quic_collinsd@quicinc.com> Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> --- drivers/regulator/qcom-rpmh-regulator.c | 115 ++++++++++++++++++++++++-------- 1 file changed, 89 insertions(+), 26 deletions(-) diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c index cf502eec0915..43b45feb02e6 100644 --- a/drivers/regulator/qcom-rpmh-regulator.c +++ b/drivers/regulator/qcom-rpmh-regulator.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. +// Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. #define pr_fmt(fmt) "%s: " fmt, __func__ @@ -68,10 +69,11 @@ enum rpmh_regulator_type { * @regulator_type: RPMh accelerator type used to manage this * regulator * @ops: Pointer to regulator ops callback structure - * @voltage_range: The single range of voltages supported by this - * PMIC regulator type + * @voltage_ranges: The possible ranges of voltages supported by this + * PMIC regulator type + * @n_linear_ranges: Number of entries in voltage_ranges * @n_voltages: The number of unique voltage set points defined - * by voltage_range + * by voltage_ranges * @hpm_min_load_uA: Minimum load current in microamps that requires * high power mode (HPM) operation. This is used * for LDO hardware type regulators only. @@ -85,7 +87,8 @@ enum rpmh_regulator_type { struct rpmh_vreg_hw_data { enum rpmh_regulator_type regulator_type; const struct regulator_ops *ops; - const struct linear_range voltage_range; + const struct linear_range *voltage_ranges; + int n_linear_ranges; int n_voltages; int hpm_min_load_uA; const int *pmic_mode_map; @@ -449,8 +452,8 @@ static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev, vreg->mode = REGULATOR_MODE_INVALID; if (rpmh_data->hw_data->n_voltages) { - vreg->rdesc.linear_ranges = &rpmh_data->hw_data->voltage_range; - vreg->rdesc.n_linear_ranges = 1; + vreg->rdesc.linear_ranges = rpmh_data->hw_data->voltage_ranges; + vreg->rdesc.n_linear_ranges = rpmh_data->hw_data->n_linear_ranges; vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages; } @@ -613,7 +616,10 @@ static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode) static const struct rpmh_vreg_hw_data pmic4_pldo = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 256, .hpm_min_load_uA = 10000, .pmic_mode_map = pmic_mode_map_pmic4_ldo, @@ -623,7 +629,10 @@ static const struct rpmh_vreg_hw_data pmic4_pldo = { static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 128, .hpm_min_load_uA = 10000, .pmic_mode_map = pmic_mode_map_pmic4_ldo, @@ -633,7 +642,10 @@ static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { static const struct rpmh_vreg_hw_data pmic4_nldo = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 128, .hpm_min_load_uA = 30000, .pmic_mode_map = pmic_mode_map_pmic4_ldo, @@ -643,7 +655,10 @@ static const struct rpmh_vreg_hw_data pmic4_nldo = { static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 216, .pmic_mode_map = pmic_mode_map_pmic4_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -652,7 +667,10 @@ static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), + }, + .n_linear_ranges = 1, .n_voltages = 259, .pmic_mode_map = pmic_mode_map_pmic4_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -661,7 +679,10 @@ static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { static const struct rpmh_vreg_hw_data pmic4_bob = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_bypass_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), + }, + .n_linear_ranges = 1, .n_voltages = 84, .pmic_mode_map = pmic_mode_map_pmic4_bob, .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, @@ -676,7 +697,10 @@ static const struct rpmh_vreg_hw_data pmic4_lvs = { static const struct rpmh_vreg_hw_data pmic5_pldo = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 256, .hpm_min_load_uA = 10000, .pmic_mode_map = pmic_mode_map_pmic5_ldo, @@ -686,7 +710,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo = { static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 63, .hpm_min_load_uA = 10000, .pmic_mode_map = pmic_mode_map_pmic5_ldo, @@ -696,7 +723,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 188, .hpm_min_load_uA = 10000, .pmic_mode_map = pmic_mode_map_pmic5_ldo, @@ -706,7 +736,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { static const struct rpmh_vreg_hw_data pmic5_nldo = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 124, .hpm_min_load_uA = 30000, .pmic_mode_map = pmic_mode_map_pmic5_ldo, @@ -716,7 +749,10 @@ static const struct rpmh_vreg_hw_data pmic5_nldo = { static const struct rpmh_vreg_hw_data pmic5_nldo515 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 211, .hpm_min_load_uA = 30000, .pmic_mode_map = pmic_mode_map_pmic5_ldo, @@ -726,7 +762,10 @@ static const struct rpmh_vreg_hw_data pmic5_nldo515 = { static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 216, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -735,7 +774,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), + }, + .n_linear_ranges = 1, .n_voltages = 264, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -744,7 +786,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), + }, + .n_linear_ranges = 1, .n_voltages = 264, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -753,7 +798,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), + }, + .n_linear_ranges = 1, .n_voltages = 268, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -762,7 +810,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 268, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -771,7 +822,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), + }, + .n_linear_ranges = 1, .n_voltages = 215, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -780,7 +834,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), + }, + .n_linear_ranges = 1, .n_voltages = 236, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -789,7 +846,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), + }, + .n_linear_ranges = 1, .n_voltages = 5, .pmic_mode_map = pmic_mode_map_pmic5_smps, .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, @@ -798,7 +858,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { static const struct rpmh_vreg_hw_data pmic5_bob = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_bypass_ops, - .voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), + }, + .n_linear_ranges = 1, .n_voltages = 32, .pmic_mode_map = pmic_mode_map_pmic5_bob, .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges 2023-12-11 3:16 ` [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges Fenglin Wu via B4 Relay @ 2023-12-12 2:44 ` David Collins 0 siblings, 0 replies; 9+ messages in thread From: David Collins @ 2023-12-12 2:44 UTC (permalink / raw) To: quic_fenglinw, Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_subbaram, quic_jprakash On 12/10/23 19:16, Fenglin Wu via B4 Relay wrote: > From: Fenglin Wu <quic_fenglinw@quicinc.com> > > Update rpmh_vreg_hw_data to support multiple linear voltage ranges for > potential regulators which have discrete voltage program ranges. > > Suggested-by: David Collins <quic_collinsd@quicinc.com> > Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> Reviewed-by: David Collins <quic_collinsd@quicinc.com> > --- > drivers/regulator/qcom-rpmh-regulator.c | 115 ++++++++++++++++++++++++-------- > 1 file changed, 89 insertions(+), 26 deletions(-) > > diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c > index cf502eec0915..43b45feb02e6 100644 > --- a/drivers/regulator/qcom-rpmh-regulator.c > +++ b/drivers/regulator/qcom-rpmh-regulator.c > @@ -1,5 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0 > // Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. > +// Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. > > #define pr_fmt(fmt) "%s: " fmt, __func__ > > @@ -68,10 +69,11 @@ enum rpmh_regulator_type { > * @regulator_type: RPMh accelerator type used to manage this > * regulator > * @ops: Pointer to regulator ops callback structure > - * @voltage_range: The single range of voltages supported by this > - * PMIC regulator type > + * @voltage_ranges: The possible ranges of voltages supported by this > + * PMIC regulator type > + * @n_linear_ranges: Number of entries in voltage_ranges > * @n_voltages: The number of unique voltage set points defined > - * by voltage_range > + * by voltage_ranges > * @hpm_min_load_uA: Minimum load current in microamps that requires > * high power mode (HPM) operation. This is used > * for LDO hardware type regulators only. > @@ -85,7 +87,8 @@ enum rpmh_regulator_type { > struct rpmh_vreg_hw_data { > enum rpmh_regulator_type regulator_type; > const struct regulator_ops *ops; > - const struct linear_range voltage_range; > + const struct linear_range *voltage_ranges; > + int n_linear_ranges; > int n_voltages; > int hpm_min_load_uA; > const int *pmic_mode_map; > @@ -449,8 +452,8 @@ static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev, > vreg->mode = REGULATOR_MODE_INVALID; > > if (rpmh_data->hw_data->n_voltages) { > - vreg->rdesc.linear_ranges = &rpmh_data->hw_data->voltage_range; > - vreg->rdesc.n_linear_ranges = 1; > + vreg->rdesc.linear_ranges = rpmh_data->hw_data->voltage_ranges; > + vreg->rdesc.n_linear_ranges = rpmh_data->hw_data->n_linear_ranges; > vreg->rdesc.n_voltages = rpmh_data->hw_data->n_voltages; > } > > @@ -613,7 +616,10 @@ static unsigned int rpmh_regulator_pmic4_bob_of_map_mode(unsigned int rpmh_mode) > static const struct rpmh_vreg_hw_data pmic4_pldo = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1664000, 0, 255, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 256, > .hpm_min_load_uA = 10000, > .pmic_mode_map = pmic_mode_map_pmic4_ldo, > @@ -623,7 +629,10 @@ static const struct rpmh_vreg_hw_data pmic4_pldo = { > static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1256000, 0, 127, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 128, > .hpm_min_load_uA = 10000, > .pmic_mode_map = pmic_mode_map_pmic4_ldo, > @@ -633,7 +642,10 @@ static const struct rpmh_vreg_hw_data pmic4_pldo_lv = { > static const struct rpmh_vreg_hw_data pmic4_nldo = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(312000, 0, 127, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 128, > .hpm_min_load_uA = 30000, > .pmic_mode_map = pmic_mode_map_pmic4_ldo, > @@ -643,7 +655,10 @@ static const struct rpmh_vreg_hw_data pmic4_nldo = { > static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 216, > .pmic_mode_map = pmic_mode_map_pmic4_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -652,7 +667,10 @@ static const struct rpmh_vreg_hw_data pmic4_hfsmps3 = { > static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 258, 4000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 259, > .pmic_mode_map = pmic_mode_map_pmic4_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -661,7 +679,10 @@ static const struct rpmh_vreg_hw_data pmic4_ftsmps426 = { > static const struct rpmh_vreg_hw_data pmic4_bob = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_bypass_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1824000, 0, 83, 32000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 84, > .pmic_mode_map = pmic_mode_map_pmic4_bob, > .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, > @@ -676,7 +697,10 @@ static const struct rpmh_vreg_hw_data pmic4_lvs = { > static const struct rpmh_vreg_hw_data pmic5_pldo = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 256, > .hpm_min_load_uA = 10000, > .pmic_mode_map = pmic_mode_map_pmic5_ldo, > @@ -686,7 +710,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo = { > static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1504000, 0, 62, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 63, > .hpm_min_load_uA = 10000, > .pmic_mode_map = pmic_mode_map_pmic5_ldo, > @@ -696,7 +723,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo_lv = { > static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1800000, 0, 187, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 188, > .hpm_min_load_uA = 10000, > .pmic_mode_map = pmic_mode_map_pmic5_ldo, > @@ -706,7 +736,10 @@ static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { > static const struct rpmh_vreg_hw_data pmic5_nldo = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 123, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 124, > .hpm_min_load_uA = 30000, > .pmic_mode_map = pmic_mode_map_pmic5_ldo, > @@ -716,7 +749,10 @@ static const struct rpmh_vreg_hw_data pmic5_nldo = { > static const struct rpmh_vreg_hw_data pmic5_nldo515 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 210, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 211, > .hpm_min_load_uA = 30000, > .pmic_mode_map = pmic_mode_map_pmic5_ldo, > @@ -726,7 +762,10 @@ static const struct rpmh_vreg_hw_data pmic5_nldo515 = { > static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 216, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -735,7 +774,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { > static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 264, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -744,7 +786,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps510 = { > static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(300000, 0, 263, 4000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 264, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -753,7 +798,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps520 = { > static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(300000, 0, 267, 4000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 268, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -762,7 +810,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_lv = { > static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(600000, 0, 267, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 268, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -771,7 +822,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps525_mv = { > static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 215, 8000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 215, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -780,7 +834,10 @@ static const struct rpmh_vreg_hw_data pmic5_ftsmps527 = { > static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(320000, 0, 235, 16000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 236, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -789,7 +846,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps515 = { > static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(900000, 0, 4, 16000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 5, > .pmic_mode_map = pmic_mode_map_pmic5_smps, > .of_map_mode = rpmh_regulator_pmic4_smps_of_map_mode, > @@ -798,7 +858,10 @@ static const struct rpmh_vreg_hw_data pmic5_hfsmps515_1 = { > static const struct rpmh_vreg_hw_data pmic5_bob = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_bypass_ops, > - .voltage_range = REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(3000000, 0, 31, 32000), > + }, > + .n_linear_ranges = 1, > .n_voltages = 32, > .pmic_mode_map = pmic_mode_map_pmic5_bob, > .of_map_mode = rpmh_regulator_pmic4_bob_of_map_mode, > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor 2023-12-11 3:16 [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards Fenglin Wu via B4 Relay 2023-12-11 3:16 ` [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges Fenglin Wu via B4 Relay @ 2023-12-11 3:17 ` Fenglin Wu via B4 Relay 2023-12-11 7:58 ` Krzysztof Kozlowski 2023-12-11 3:17 ` [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators Fenglin Wu via B4 Relay 2023-12-11 3:17 ` [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards Fenglin Wu via B4 Relay 3 siblings, 1 reply; 9+ messages in thread From: Fenglin Wu via B4 Relay @ 2023-12-11 3:17 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash, Fenglin Wu From: Fenglin Wu <quic_fenglinw@quicinc.com> Add compatible for PM8010 RPMH regulators present on sm8550-qrd and sm8550-mtp boards. Suggested-by: David Collins <quic_collinsd@quicinc.com> Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> --- .../devicetree/bindings/regulator/qcom,rpmh-regulator.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.yaml index acd37f28ef53..27c6d5152413 100644 --- a/Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.yaml +++ b/Documentation/devicetree/bindings/regulator/qcom,rpmh-regulator.yaml @@ -42,6 +42,7 @@ description: | For PM7325, smps1 - smps8, ldo1 - ldo19 For PM8005, smps1 - smps4 For PM8009, smps1 - smps2, ldo1 - ldo7 + For PM8010, ldo1 - ldo7 For PM8150, smps1 - smps10, ldo1 - ldo18 For PM8150L, smps1 - smps8, ldo1 - ldo11, bob, flash, rgb For PM8350, smps1 - smps12, ldo1 - ldo10 @@ -68,6 +69,7 @@ properties: - qcom,pm8005-rpmh-regulators - qcom,pm8009-rpmh-regulators - qcom,pm8009-1-rpmh-regulators + - qcom,pm8010-rpmh-regulators - qcom,pm8150-rpmh-regulators - qcom,pm8150l-rpmh-regulators - qcom,pm8350-rpmh-regulators @@ -238,6 +240,18 @@ allOf: "^vdd-l[1-47]-supply$": true "^vdd-s[1-2]-supply$": true + - if: + properties: + compatible: + enum: + - qcom,pm8010-rpmh-regulators + then: + properties: + vdd-l1-l2-supply: true + vdd-l3-l4-supply: true + patternProperties: + "^vdd-l[5-7]-supply$": true + - if: properties: compatible: -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor 2023-12-11 3:17 ` [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor Fenglin Wu via B4 Relay @ 2023-12-11 7:58 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2023-12-11 7:58 UTC (permalink / raw) To: quic_fenglinw, Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash On 11/12/2023 04:17, Fenglin Wu via B4 Relay wrote: > From: Fenglin Wu <quic_fenglinw@quicinc.com> > > Add compatible for PM8010 RPMH regulators present on sm8550-qrd and > sm8550-mtp boards. > > Suggested-by: David Collins <quic_collinsd@quicinc.com> > Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> Please use subject prefixes matching the subsystem. You can get them for example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory your patch is touching. Also fix typo: regultor->regulator With both fixed: Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators 2023-12-11 3:16 [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards Fenglin Wu via B4 Relay 2023-12-11 3:16 ` [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges Fenglin Wu via B4 Relay 2023-12-11 3:17 ` [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor Fenglin Wu via B4 Relay @ 2023-12-11 3:17 ` Fenglin Wu via B4 Relay 2023-12-12 2:44 ` David Collins 2023-12-11 3:17 ` [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards Fenglin Wu via B4 Relay 3 siblings, 1 reply; 9+ messages in thread From: Fenglin Wu via B4 Relay @ 2023-12-11 3:17 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash, Fenglin Wu From: Fenglin Wu <quic_fenglinw@quicinc.com> Add RPMH regulators exposed by Qualcomm Technologies, Inc. PM8010 PMIC. It has 7 LDOs with 3 different types, LDO1 - LDO2 are L502 NMOS LDOs, LDO5 and LDO7 are L502 PMOS LDOs, LDO3/LDO4/LDO6 are L502 PMOS LDO for low noise applications. Also, LDO3 - LDO7 don't support LPM. Suggested-by: David Collins <quic_collinsd@quicinc.com> Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> --- drivers/regulator/qcom-rpmh-regulator.c | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c index 43b45feb02e6..80e304711345 100644 --- a/drivers/regulator/qcom-rpmh-regulator.c +++ b/drivers/regulator/qcom-rpmh-regulator.c @@ -511,6 +511,14 @@ static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = { [REGULATOR_MODE_FAST] = -EINVAL, }; +static const int pmic_mode_map_pmic5_ldo_hpm[REGULATOR_MODE_STANDBY + 1] = { + [REGULATOR_MODE_INVALID] = -EINVAL, + [REGULATOR_MODE_STANDBY] = -EINVAL, + [REGULATOR_MODE_IDLE] = -EINVAL, + [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, + [REGULATOR_MODE_FAST] = -EINVAL, +}; + static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode) { unsigned int mode; @@ -733,6 +741,33 @@ static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, }; +static const struct rpmh_vreg_hw_data pmic5_pldo502 = { + .regulator_type = VRM, + .ops = &rpmh_regulator_vrm_ops, + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), + }, + .n_linear_ranges = 1, + .n_voltages = 256, + .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, +}; + +static const struct rpmh_vreg_hw_data pmic5_pldo502ln = { + .regulator_type = VRM, + .ops = &rpmh_regulator_vrm_ops, + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(1800000, 0, 2, 200000), + REGULATOR_LINEAR_RANGE(2608000, 3, 28, 16000), + REGULATOR_LINEAR_RANGE(3104000, 29, 30, 96000), + REGULATOR_LINEAR_RANGE(3312000, 31, 31, 0), + }, + .n_linear_ranges = 4, + .n_voltages = 32, + .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, +}; + static const struct rpmh_vreg_hw_data pmic5_nldo = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_drms_ops, @@ -759,6 +794,19 @@ static const struct rpmh_vreg_hw_data pmic5_nldo515 = { .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, }; +static const struct rpmh_vreg_hw_data pmic5_nldo502 = { + .regulator_type = VRM, + .ops = &rpmh_regulator_vrm_drms_ops, + .voltage_ranges = (struct linear_range[]) { + REGULATOR_LINEAR_RANGE(528000, 0, 127, 8000), + }, + .n_linear_ranges = 1, + .n_voltages = 128, + .hpm_min_load_uA = 30000, + .pmic_mode_map = pmic_mode_map_pmic5_ldo, + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, +}; + static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { .regulator_type = VRM, .ops = &rpmh_regulator_vrm_ops, @@ -1210,6 +1258,16 @@ static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = { {} }; +static const struct rpmh_vreg_init_data pm8010_vreg_data[] = { + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo502, "vdd-l1-l2"), + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo502, "vdd-l1-l2"), + RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo502ln, "vdd-l3-l4"), + RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo502ln, "vdd-l3-l4"), + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo502, "vdd-l5"), + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo502ln, "vdd-l6"), + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo502, "vdd-l7"), +}; + static const struct rpmh_vreg_init_data pm6150_vreg_data[] = { RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), @@ -1525,6 +1583,10 @@ static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = { .compatible = "qcom,pm8009-1-rpmh-regulators", .data = pm8009_1_vreg_data, }, + { + .compatible = "qcom,pm8010-rpmh-regulators", + .data = pm8010_vreg_data, + }, { .compatible = "qcom,pm8150-rpmh-regulators", .data = pm8150_vreg_data, -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators 2023-12-11 3:17 ` [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators Fenglin Wu via B4 Relay @ 2023-12-12 2:44 ` David Collins 0 siblings, 0 replies; 9+ messages in thread From: David Collins @ 2023-12-12 2:44 UTC (permalink / raw) To: quic_fenglinw, Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_subbaram, quic_jprakash On 12/10/23 19:17, Fenglin Wu via B4 Relay wrote: > From: Fenglin Wu <quic_fenglinw@quicinc.com> > > Add RPMH regulators exposed by Qualcomm Technologies, Inc. PM8010 > PMIC. It has 7 LDOs with 3 different types, LDO1 - LDO2 are L502 > NMOS LDOs, LDO5 and LDO7 are L502 PMOS LDOs, LDO3/LDO4/LDO6 are > L502 PMOS LDO for low noise applications. Also, LDO3 - LDO7 don't > support LPM. > > Suggested-by: David Collins <quic_collinsd@quicinc.com> > Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> Reviewed-by: David Collins <quic_collinsd@quicinc.com> > --- > drivers/regulator/qcom-rpmh-regulator.c | 62 +++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/drivers/regulator/qcom-rpmh-regulator.c b/drivers/regulator/qcom-rpmh-regulator.c > index 43b45feb02e6..80e304711345 100644 > --- a/drivers/regulator/qcom-rpmh-regulator.c > +++ b/drivers/regulator/qcom-rpmh-regulator.c > @@ -511,6 +511,14 @@ static const int pmic_mode_map_pmic5_ldo[REGULATOR_MODE_STANDBY + 1] = { > [REGULATOR_MODE_FAST] = -EINVAL, > }; > > +static const int pmic_mode_map_pmic5_ldo_hpm[REGULATOR_MODE_STANDBY + 1] = { Minor: This is fine as-is. However, it might be a bit better with the name: "pmic_mode_map_pmic5_ldo_hpm_only". > + [REGULATOR_MODE_INVALID] = -EINVAL, > + [REGULATOR_MODE_STANDBY] = -EINVAL, > + [REGULATOR_MODE_IDLE] = -EINVAL, > + [REGULATOR_MODE_NORMAL] = PMIC5_LDO_MODE_HPM, > + [REGULATOR_MODE_FAST] = -EINVAL, > +}; > + > static unsigned int rpmh_regulator_pmic4_ldo_of_map_mode(unsigned int rpmh_mode) > { > unsigned int mode; > @@ -733,6 +741,33 @@ static const struct rpmh_vreg_hw_data pmic5_pldo515_mv = { > .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, > }; > > +static const struct rpmh_vreg_hw_data pmic5_pldo502 = { > + .regulator_type = VRM, > + .ops = &rpmh_regulator_vrm_ops, > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1504000, 0, 255, 8000), > + }, > + .n_linear_ranges = 1, > + .n_voltages = 256, > + .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, > + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, > +}; > + > +static const struct rpmh_vreg_hw_data pmic5_pldo502ln = { > + .regulator_type = VRM, > + .ops = &rpmh_regulator_vrm_ops, > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(1800000, 0, 2, 200000), > + REGULATOR_LINEAR_RANGE(2608000, 3, 28, 16000), > + REGULATOR_LINEAR_RANGE(3104000, 29, 30, 96000), > + REGULATOR_LINEAR_RANGE(3312000, 31, 31, 0), > + }, > + .n_linear_ranges = 4, > + .n_voltages = 32, > + .pmic_mode_map = pmic_mode_map_pmic5_ldo_hpm, > + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, > +}; > + > static const struct rpmh_vreg_hw_data pmic5_nldo = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_drms_ops, > @@ -759,6 +794,19 @@ static const struct rpmh_vreg_hw_data pmic5_nldo515 = { > .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, > }; > > +static const struct rpmh_vreg_hw_data pmic5_nldo502 = { > + .regulator_type = VRM, > + .ops = &rpmh_regulator_vrm_drms_ops, > + .voltage_ranges = (struct linear_range[]) { > + REGULATOR_LINEAR_RANGE(528000, 0, 127, 8000), > + }, > + .n_linear_ranges = 1, > + .n_voltages = 128, > + .hpm_min_load_uA = 30000, > + .pmic_mode_map = pmic_mode_map_pmic5_ldo, > + .of_map_mode = rpmh_regulator_pmic4_ldo_of_map_mode, > +}; > + > static const struct rpmh_vreg_hw_data pmic5_hfsmps510 = { > .regulator_type = VRM, > .ops = &rpmh_regulator_vrm_ops, > @@ -1210,6 +1258,16 @@ static const struct rpmh_vreg_init_data pm8009_1_vreg_data[] = { > {} > }; > > +static const struct rpmh_vreg_init_data pm8010_vreg_data[] = { > + RPMH_VREG("ldo1", "ldo%s1", &pmic5_nldo502, "vdd-l1-l2"), > + RPMH_VREG("ldo2", "ldo%s2", &pmic5_nldo502, "vdd-l1-l2"), > + RPMH_VREG("ldo3", "ldo%s3", &pmic5_pldo502ln, "vdd-l3-l4"), > + RPMH_VREG("ldo4", "ldo%s4", &pmic5_pldo502ln, "vdd-l3-l4"), > + RPMH_VREG("ldo5", "ldo%s5", &pmic5_pldo502, "vdd-l5"), > + RPMH_VREG("ldo6", "ldo%s6", &pmic5_pldo502ln, "vdd-l6"), > + RPMH_VREG("ldo7", "ldo%s7", &pmic5_pldo502, "vdd-l7"), > +}; > + > static const struct rpmh_vreg_init_data pm6150_vreg_data[] = { > RPMH_VREG("smps1", "smp%s1", &pmic5_ftsmps510, "vdd-s1"), > RPMH_VREG("smps2", "smp%s2", &pmic5_ftsmps510, "vdd-s2"), > @@ -1525,6 +1583,10 @@ static const struct of_device_id __maybe_unused rpmh_regulator_match_table[] = { > .compatible = "qcom,pm8009-1-rpmh-regulators", > .data = pm8009_1_vreg_data, > }, > + { > + .compatible = "qcom,pm8010-rpmh-regulators", > + .data = pm8010_vreg_data, > + }, > { > .compatible = "qcom,pm8150-rpmh-regulators", > .data = pm8150_vreg_data, > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards 2023-12-11 3:16 [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards Fenglin Wu via B4 Relay ` (2 preceding siblings ...) 2023-12-11 3:17 ` [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators Fenglin Wu via B4 Relay @ 2023-12-11 3:17 ` Fenglin Wu via B4 Relay 2023-12-11 9:29 ` Konrad Dybcio 3 siblings, 1 reply; 9+ messages in thread From: Fenglin Wu via B4 Relay @ 2023-12-11 3:17 UTC (permalink / raw) To: Andy Gross, Bjorn Andersson, Konrad Dybcio, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash, Fenglin Wu From: Fenglin Wu <quic_fenglinw@quicinc.com> Add PM8010 regulator device nodes for sm8550-mtp and sm8550-qrd boards. Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> --- arch/arm64/boot/dts/qcom/sm8550-mtp.dts | 120 ++++++++++++++++++++++++++++++++ arch/arm64/boot/dts/qcom/sm8550-qrd.dts | 120 ++++++++++++++++++++++++++++++++ 2 files changed, 240 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sm8550-mtp.dts b/arch/arm64/boot/dts/qcom/sm8550-mtp.dts index 9a70875028b7..8395d363d18d 100644 --- a/arch/arm64/boot/dts/qcom/sm8550-mtp.dts +++ b/arch/arm64/boot/dts/qcom/sm8550-mtp.dts @@ -510,6 +510,126 @@ vreg_l3g_1p2: ldo3 { regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; }; }; + + regulators-6 { + compatible = "qcom,pm8010-rpmh-regulators"; + qcom,pmic-id = "m"; + + vdd-l1-l2-supply = <&vreg_s4g_1p3>; + vdd-l3-l4-supply = <&vreg_bob2>; + vdd-l5-supply = <&vreg_s6g_1p8>; + vdd-l6-supply = <&vreg_s6g_1p8>; + vdd-l7-supply = <&vreg_bob1>; + + vreg_l1m_1p056: ldo1 { + regulator-name = "vreg_l1m_1p056"; + regulator-min-microvolt = <1056000>; + regulator-max-microvolt = <1056000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2m_1p056: ldo2 { + regulator-name = "vreg_l2m_1p056"; + regulator-min-microvolt = <1056000>; + regulator-max-microvolt = <1056000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3m_2p8: ldo3 { + regulator-name = "vreg_l3m_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l4m_2p8: ldo4 { + regulator-name = "vreg_l4m_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l5m_1p8: ldo5 { + regulator-name = "vreg_l5m_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6m_1p8: ldo6 { + regulator-name = "vreg_l6m_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l7m_2p9: ldo7 { + regulator-name = "vreg_l7m_2p9"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2904000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-7 { + compatible = "qcom,pm8010-rpmh-regulators"; + qcom,pmic-id = "n"; + + vdd-l1-l2-supply = <&vreg_s4g_1p3>; + vdd-l3-l4-supply = <&vreg_bob2>; + vdd-l5-supply = <&vreg_s6g_1p8>; + vdd-l6-supply = <&vreg_bob1>; + vdd-l7-supply = <&vreg_bob1>; + + vreg_l1n_1p1: ldo1 { + regulator-name = "vreg_l1n_1p1"; + regulator-min-microvolt = <1104000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2n_1p1: ldo2 { + regulator-name = "vreg_l2n_1p1"; + regulator-min-microvolt = <1104000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3n_2p8: ldo3 { + regulator-name = "vreg_l3n_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3000000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l4n_2p8: ldo4 { + regulator-name = "vreg_l4n_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3300000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l5n_1p8: ldo5 { + regulator-name = "vreg_l5n_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6n_3p3: ldo6 { + regulator-name = "vreg_l6n_3p3"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3304000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l7n_2p96: ldo7 { + regulator-name = "vreg_l7n_2p96"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; }; &i2c_master_hub_0 { diff --git a/arch/arm64/boot/dts/qcom/sm8550-qrd.dts b/arch/arm64/boot/dts/qcom/sm8550-qrd.dts index eef811def39b..7ca93c149215 100644 --- a/arch/arm64/boot/dts/qcom/sm8550-qrd.dts +++ b/arch/arm64/boot/dts/qcom/sm8550-qrd.dts @@ -527,6 +527,126 @@ vreg_l3g_1p2: ldo3 { regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; }; }; + + regulators-6 { + compatible = "qcom,pm8010-rpmh-regulators"; + qcom,pmic-id = "m"; + + vdd-l1-l2-supply = <&vreg_s4g_1p25>; + vdd-l3-l4-supply = <&vreg_bob2>; + vdd-l5-supply = <&vreg_s6g_1p86>; + vdd-l6-supply = <&vreg_s6g_1p86>; + vdd-l7-supply = <&vreg_bob1>; + + vreg_l1m_1p056: ldo1 { + regulator-name = "vreg_l1m_1p056"; + regulator-min-microvolt = <1056000>; + regulator-max-microvolt = <1056000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2m_1p056: ldo2 { + regulator-name = "vreg_l2m_1p056"; + regulator-min-microvolt = <1056000>; + regulator-max-microvolt = <1056000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3m_2p8: ldo3 { + regulator-name = "vreg_l3m_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l4m_2p8: ldo4 { + regulator-name = "vreg_l4m_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l5m_1p8: ldo5 { + regulator-name = "vreg_l5m_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6m_1p8: ldo6 { + regulator-name = "vreg_l6m_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l7m_2p9: ldo7 { + regulator-name = "vreg_l7m_2p9"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2904000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-7 { + compatible = "qcom,pm8010-rpmh-regulators"; + qcom,pmic-id = "n"; + + vdd-l1-l2-supply = <&vreg_s4g_1p25>; + vdd-l3-l4-supply = <&vreg_bob2>; + vdd-l5-supply = <&vreg_s6g_1p86>; + vdd-l6-supply = <&vreg_bob1>; + vdd-l7-supply = <&vreg_bob1>; + + vreg_l1n_1p1: ldo1 { + regulator-name = "vreg_l1n_1p1"; + regulator-min-microvolt = <1104000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2n_1p1: ldo2 { + regulator-name = "vreg_l2n_1p1"; + regulator-min-microvolt = <1104000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3n_2p8: ldo3 { + regulator-name = "vreg_l3n_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3000000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l4n_2p8: ldo4 { + regulator-name = "vreg_l4n_2p8"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3300000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l5n_1p8: ldo5 { + regulator-name = "vreg_l5n_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6n_3p3: ldo6 { + regulator-name = "vreg_l6n_3p3"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <3304000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l7n_2p96: ldo7 { + regulator-name = "vreg_l7n_2p96"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; }; &i2c_master_hub_0 { -- 2.25.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards 2023-12-11 3:17 ` [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards Fenglin Wu via B4 Relay @ 2023-12-11 9:29 ` Konrad Dybcio 0 siblings, 0 replies; 9+ messages in thread From: Konrad Dybcio @ 2023-12-11 9:29 UTC (permalink / raw) To: quic_fenglinw, Andy Gross, Bjorn Andersson, Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley, kernel Cc: Krzysztof Kozlowski, linux-arm-msm, linux-kernel, devicetree, quic_collinsd, quic_subbaram, quic_jprakash On 11.12.2023 04:17, Fenglin Wu via B4 Relay wrote: > From: Fenglin Wu <quic_fenglinw@quicinc.com> > > Add PM8010 regulator device nodes for sm8550-mtp and sm8550-qrd boards. > > Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com> > --- Please create separate commits with board name prefixes: arm64: dts: qcom: sm8550-mtp: arm64: dts: qcom: sm8550-qrd: Otherwise lgtm Konrad ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2023-12-12 2:45 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-12-11 3:16 [PATCH 0/4] Add pm8010 RPMH regulators for sm8550 boards Fenglin Wu via B4 Relay 2023-12-11 3:16 ` [PATCH 1/4] regulator: qcom-rpmh: extend to support multiple linear voltage ranges Fenglin Wu via B4 Relay 2023-12-12 2:44 ` David Collins 2023-12-11 3:17 ` [PATCH 2/4] regulator: qcom,rpmh: add compatible for pm8010 RPMH regultor Fenglin Wu via B4 Relay 2023-12-11 7:58 ` Krzysztof Kozlowski 2023-12-11 3:17 ` [PATCH 3/4] regulator: qcom-rpmh: add support for pm8010 regulators Fenglin Wu via B4 Relay 2023-12-12 2:44 ` David Collins 2023-12-11 3:17 ` [PATCH 4/4] arm64: dts: qcom: Add pm8010 regulators for sm8550 boards Fenglin Wu via B4 Relay 2023-12-11 9:29 ` Konrad Dybcio
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).