dt-bindings: regulator: qcom,spmi-regulator: Convert to dtschema
Subsystems (4)
PATCH v3 1/6 dt-bindings: regulator: qcom,spmi-regulator: Convert to dtschema
Convert the bindings of Qualcomm SPMI regulators to DT schema.
---
Changes in v3:
* Remove quotes around refs
* Use much stricter regex for regulator node matching
* Add supply matching per compatible
* Add blank interrupts and interrupt-names as generic properties
Changes in v2:
* Remove the forgotten text bindings
* Move allOf after patternProperties
* Use my private email as the maintainer email
I am aware that syscon alone is not really acceptable, its converted directly from the old text bindings.
There is also the issue of some MSM8994, MSM8996 and APQ8096 devices using '#address-cells', '#size-cells', some even defining reg property for regulators.
Any advice on how to solve these issues is appreciated.
--- .../regulator/qcom,spmi-regulator.txt | 347 ------------------ .../regulator/qcom,spmi-regulator.yaml | 341 +++++++++++++++++ 2 files changed, 341 insertions(+), 347 deletions(-) delete mode 100644 Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.txt create mode 100644 Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.txt deleted +0 -347
@@ -1,347 +0,0 @@ -Qualcomm SPMI Regulators - -- compatible: - Usage: required - Value type: <string> - Definition: must be one of: - "qcom,pm8004-regulators" - "qcom,pm8005-regulators" - "qcom,pm8226-regulators" - "qcom,pm8841-regulators" - "qcom,pm8916-regulators" - "qcom,pm8941-regulators" - "qcom,pm8950-regulators" - "qcom,pm8994-regulators" - "qcom,pmi8994-regulators" - "qcom,pm660-regulators" - "qcom,pm660l-regulators" - "qcom,pms405-regulators" - -- interrupts: - Usage: optional - Value type: <prop-encoded-array> - Definition: List of OCP interrupts. - -- interrupt-names: - Usage: required if 'interrupts' property present - Value type: <string-array> - Definition: List of strings defining the names of the - interrupts in the 'interrupts' property 1-to-1. - Supported values are "ocp-<regulator_name>", where - <regulator_name> corresponds to a voltage switch - type regulator. - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_s5-supply: -- vdd_s6-supply: -- vdd_s7-supply: -- vdd_s8-supply: - Usage: optional (pm8841 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_l1_l3-supply: -- vdd_l2-supply: -- vdd_l4_l5_l6-supply: -- vdd_l7-supply: -- vdd_l8_l11_l14_l15_l16-supply: -- vdd_l9_l10_l12_l13_l17_l18-supply: - Usage: optional (pm8916 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_l1_l3-supply: -- vdd_l2_lvs_1_2_3-supply: -- vdd_l4_l11-supply: -- vdd_l5_l7-supply: -- vdd_l6_l12_l14_l15-supply: -- vdd_l8_l16_l18_19-supply: -- vdd_l9_l10_l17_l22-supply: -- vdd_l13_l20_l23_l24-supply: -- vdd_l21-supply: -- vin_5vs-supply: - Usage: optional (pm8941 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_s4-supply: -- vdd_s5-supply: -- vdd_s6-supply: -- vdd_l1_l19-supply: -- vdd_l2_l23-supply: -- vdd_l3-supply: -- vdd_l4_l5_l6_l7_l16-supply: -- vdd_l8_l11_l12_l17_l22-supply: -- vdd_l9_l10_l13_l14_l15_l18-supply: -- vdd_l20-supply: -- vdd_l21-supply: - Usage: optional (pm8950 only) - Value type: <phandle> - Definition: reference to regulator supplying the input pin, as - described in the data sheet - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_s5-supply: -- vdd_s6-supply: -- vdd_s7-supply: -- vdd_s8-supply: -- vdd_s9-supply: -- vdd_s10-supply: -- vdd_s11-supply: -- vdd_s12-supply: -- vdd_l1-supply: -- vdd_l2_l26_l28-supply: -- vdd_l3_l11-supply: -- vdd_l4_l27_l31-supply: -- vdd_l5_l7-supply: -- vdd_l6_l12_l32-supply: -- vdd_l8_l16_l30-supply: -- vdd_l9_l10_l18_l22-supply: -- vdd_l13_l19_l23_l24-supply: -- vdd_l14_l15-supply: -- vdd_l17_l29-supply: -- vdd_l20_l21-supply: -- vdd_l25-supply: -- vdd_lvs_1_2-supply: - Usage: optional (pm8994 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_l1-supply: - Usage: optional (pmi8994 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_l1_l6_l7-supply: -- vdd_l2_l3-supply: -- vdd_l5-supply: -- vdd_l8_l9_l10_l11_l12_l13_l14-supply: -- vdd_l15_l16_l17_l18_l19-supply: -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s5-supply: -- vdd_s6-supply: - Usage: optional (pm660 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_l1_l9_l10-supply: -- vdd_l2-supply: -- vdd_l3_l5_l7_l8-supply: -- vdd_l4_l6-supply: -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_s5-supply: - Usage: optional (pm660l only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- vdd_l1_l2-supply: -- vdd_l3_l8-supply: -- vdd_l4-supply: -- vdd_l5_l6-supply: -- vdd_l10_l11_l12_l13-supply: -- vdd_l7-supply: -- vdd_l9-supply: -- vdd_s1-supply: -- vdd_s2-supply: -- vdd_s3-supply: -- vdd_s4-supply: -- vdd_s5-supply - Usage: optional (pms405 only) - Value type: <phandle> - Definition: Reference to regulator supplying the input pin, as - described in the data sheet. - -- qcom,saw-reg: - Usage: optional - Value type: <phandle> - Description: Reference to syscon node defining the SAW registers. - - -The regulator node houses sub-nodes for each regulator within the device. Each -sub-node is identified using the node's name, with valid values listed for each -of the PMICs below. - -pm8004: - s2, s5 - -pm8005: - s1, s2, s3, s4 - -pm8841: - s1, s2, s3, s4, s5, s6, s7, s8 - -pm8916: - s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, - l14, l15, l16, l17, l18 - -pm8941: - s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, - l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, lvs1, lvs2, lvs3, - 5vs1, 5vs2 - -pm8994: - s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, l1, l2, l3, l4, l5, - l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, - l21, l22, l23, l24, l25, l26, l27, l28, l29, l30, l31, l32, lvs1, lvs2 - -pmi8994: - s1, s2, s3, l1 - -The content of each sub-node is defined by the standard binding for regulators - -see regulator.txt - with additional custom properties described below: - -- regulator-initial-mode: - Usage: optional - Value type: <u32> - Description: 2 = Set initial mode to auto mode (automatically select - between HPM and LPM); not available on boost type - regulators. - - 1 = Set initial mode to high power mode (HPM), also referred - to as NPM. HPM consumes more ground current than LPM, but - it can source significantly higher load current. HPM is not - available on boost type regulators. For voltage switch type - regulators, HPM implies that over current protection and - soft start are active all the time. - - 0 = Set initial mode to low power mode (LPM). - -- qcom,ocp-max-retries: - Usage: optional - Value type: <u32> - Description: Maximum number of times to try toggling a voltage switch - off and back on as a result of consecutive over current - events. - -- qcom,ocp-retry-delay: - Usage: optional - Value type: <u32> - Description: Time to delay in milliseconds between each voltage switch - toggle after an over current event takes place. - -- qcom,pin-ctrl-enable: - Usage: optional - Value type: <u32> - Description: Bit mask specifying which hardware pins should be used to - enable the regulator, if any; supported bits are: - 0 = ignore all hardware enable signals - BIT(0) = follow HW0_EN signal - BIT(1) = follow HW1_EN signal - BIT(2) = follow HW2_EN signal - BIT(3) = follow HW3_EN signal - -- qcom,pin-ctrl-hpm: - Usage: optional - Value type: <u32> - Description: Bit mask specifying which hardware pins should be used to - force the regulator into high power mode, if any; - supported bits are: - 0 = ignore all hardware enable signals - BIT(0) = follow HW0_EN signal - BIT(1) = follow HW1_EN signal - BIT(2) = follow HW2_EN signal - BIT(3) = follow HW3_EN signal - BIT(4) = follow PMIC awake state - -- qcom,vs-soft-start-strength: - Usage: optional - Value type: <u32> - Description: This property sets the soft start strength for voltage - switch type regulators; supported values are: - 0 = 0.05 uA - 1 = 0.25 uA - 2 = 0.55 uA - 3 = 0.75 uA - -- qcom,saw-slave: - Usage: optional - Value type: <boo> - Description: SAW controlled gang slave. Will not be configured. - -- qcom,saw-leader: - Usage: optional - Value type: <boo> - Description: SAW controlled gang leader. Will be configured as - SAW regulator. - -Example: - - regulators { - compatible = "qcom,pm8941-regulators"; - vdd_l1_l3-supply = <&s1>; - - s1: s1 { - regulator-min-microvolt = <1300000>; - regulator-max-microvolt = <1400000>; - }; - - ... - - l1: l1 { - regulator-min-microvolt = <1225000>; - regulator-max-microvolt = <1300000>; - }; - - .... - }; - -Example 2: - - saw3: syscon@9A10000 { - compatible = "syscon"; - reg = <0x9A10000 0x1000>; - }; - - ... - - spm-regulators { - compatible = "qcom,pm8994-regulators"; - qcom,saw-reg = <&saw3>; - s8 { - qcom,saw-slave; - }; - s9 { - qcom,saw-slave; - }; - s10 { - qcom,saw-slave; - }; - pm8994_s11_saw: s11 { - qcom,saw-leader; - regulator-always-on; - regulator-min-microvolt = <900000>; - regulator-max-microvolt = <1140000>; - }; - };
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml new file +341 -0
341 lines not on this page · raw message
Signature · 1 line
2.36.1
PATCH v3 2/6 regulator: qcom_spmi: add support for HT_P150
HT_P150 is a LDO PMOS regulator based on LV P150 using HFS430 layout found in PMP8074 and PMS405 PMIC-s.
Both PMP8074 and PMS405 define the programmable range as 1.616V to 3.304V but the actual MAX output voltage depends on the exact LDO in each of the PMIC-s.
It has a max current of 150mA, voltage step of 8mV.
--- drivers/regulator/qcom_spmi-regulator.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/regulator/qcom_spmi-regulator.c +7 -0
@@ -164,6 +164,7 @@ enum spmi_regulator_subtype {SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL3 =0x0f ,SPMI_REGULATOR_SUBTYPE_ULT_HF_CTL4 =0x10 ,SPMI_REGULATOR_SUBTYPE_HFS430 =0x0a , + SPMI_REGULATOR_SUBTYPE_HT_P150 = 0x35, }; enum spmi_common_regulator_registers {
@@ -544,6 +545,10 @@ static struct spmi_voltage_range hfs430_ranges[] = { SPMI_VOLTAGE_RANGE(0, 320000, 320000, 2040000, 2040000, 8000), }; +static struct spmi_voltage_range ht_p150_ranges[] = { +SPMI_VOLTAGE_RANGE (0 ,1616000 ,1616000 ,3304000 ,3304000 ,8000 ), +}; +static DEFINE_SPMI_SET_POINTS (pldo);static DEFINE_SPMI_SET_POINTS (nldo1);static DEFINE_SPMI_SET_POINTS (nldo2);
@@ -564,6 +569,7 @@ static DEFINE_SPMI_SET_POINTS(nldo660);static DEFINE_SPMI_SET_POINTS (ht_lvpldo);static DEFINE_SPMI_SET_POINTS (ht_nldo);static DEFINE_SPMI_SET_POINTS (hfs430); +static DEFINE_SPMI_SET_POINTS (ht_p150);static inline int spmi_vreg_read (struct spmi_regulator *vreg,u16 addr,u8 *buf,int len)
@@ -1458,6 +1464,7 @@ static const struct regulator_ops spmi_hfs430_ops = {static const struct spmi_regulator_mapping supported_regulators[] = {/* type subtype dig_min dig_max ltype ops setpoints hpm_min */ +SPMI_VREG (LDO ,HT_P150 ,0 ,INF ,HFS430 , hfs430, ht_p150,10000 ),SPMI_VREG (BUCK ,GP_CTL ,0 ,INF ,SMPS , smps, smps,100000 ),SPMI_VREG (BUCK ,HFS430 ,0 ,INF ,HFS430 , hfs430, hfs430,10000 ),SPMI_VREG (LDO ,N300 ,0 ,INF ,LDO , ldo, nldo1,10000 ),
Signature · 1 line
2.36.1
PATCH v3 3/6 dt-bindings: regulator: qcom,spmi-regulator: add PMP8074 PMIC
In reply to Robert MarkoDocument the PMP8074 PMIC compatible.
---
Changes in v3:
* Add supply matching
--- .../bindings/regulator/qcom,spmi-regulator.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+)
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml +12 -0
@@ -23,6 +23,7 @@ properties: - qcom,pm8950-regulators - qcom,pm8994-regulators - qcom,pmi8994-regulators + - qcom,pmp8074-regulators - qcom,pms405-regulators interrupts: true
@@ -280,6 +281,17 @@ allOf: vdd_l1-supply: true patternProperties: "^vdd_s[1-3]-supply$": true + - if: + properties: + compatible: + contains: + enum: + - qcom,pmp8074-regulators + then: + properties: + vdd_l10_l11_l12_l13-supply: true + patternProperties: + "^vdd_s[3-4]-supply$": true - if: properties: compatible:
Signature · 1 line
2.36.1
Re: [PATCH v3 3/6] dt-bindings: regulator: qcom,spmi-regulator: add PMP8074 PMIC
Quoted 6 lines · Robert Marko
Document the PMP8074 PMIC compatible.
Signed-off-by Robert Marko <[email protected]>---
Changes in v3:
* Add supply matching
Best regards,
Krzysztof
PATCH v3 4/6 regulator: qcom_spmi: Add support for PMP8074 regulators
In reply to Robert MarkoPMP8074 is a companion PMIC for the Qualcomm IPQ8074 WiSoC-s.
It features 5 HF-SMPS and 13 LDO regulators.
This commit adds support for S3 and S4 HF-SMPS buck regulators of the HFS430 type and LDO11 of the HT_P150 type.
S3 is the CPU cluster voltage supply, S4 supplies the UBI32 NPU cores and LDO11 is the SDIO/eMMC I/O voltage regulator required for high speeds.
--- drivers/regulator/qcom_spmi-regulator.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/regulator/qcom_spmi-regulator.c +8 -0
@@ -2137,6 +2137,13 @@ static const struct spmi_regulator_data pms405_regulators[] = { { } }; +static const struct spmi_regulator_data pmp8074_regulators[] = { + {"s3" ,0x1a00 ,"vdd_s3" }, + {"s4" ,0x1d00 ,"vdd_s4" }, + {"l11" ,0x4a00 ,"vdd_l10_l11_l12_l13" }, + { } +}; +static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible ="qcom,pm8004-regulators" , .data = &pm8004_regulators }, { .compatible ="qcom,pm8005-regulators" , .data = &pm8005_regulators },
@@ -2150,6 +2157,7 @@ static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible = "qcom,pm660-regulators", .data = &pm660_regulators }, { .compatible = "qcom,pm660l-regulators", .data = &pm660l_regulators }, { .compatible = "qcom,pms405-regulators", .data = &pms405_regulators }, + { .compatible = "qcom,pmp8074-regulators", .data = &pmp8074_regulators }, { } };MODULE_DEVICE_TABLE (of, qcom_spmi_regulator_match);
Signature · 1 line
2.36.1
Re: [PATCH v3 4/6] regulator: qcom_spmi: Add support for PMP8074 regulators
Quoted 19 lines · Robert Marko
PMP8074 is a companion PMIC for the Qualcomm IPQ8074 WiSoC-s.
It features 5 HF-SMPS and 13 LDO regulators.
This commit adds support for S3 and S4 HF-SMPS buck regulators of the HFS430 type and LDO11 of the
HT_P150type.
S3 is the CPU cluster voltage supply, S4 supplies the UBI32 NPU cores and LDO11 is the SDIO/eMMC I/O voltage regulator required for high speeds.Signed-off-by Robert Marko <[email protected]>--- drivers/regulator/qcom_spmi-regulator.c | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/regulator/qcom_spmi-regulator.c +0
-0
drivers/regulator/qcom_spmi-regulator.c static const struct spmi_regulator_data pms405_regulators[] = { · line 2140
Quoted 4 lines
drivers/regulator/qcom_spmi-regulator.c +1
-0@@ -2137,6 +2137,13 @@ static const struct spmi_regulator_data pms405_regulators[] = { { } }; +static const struct spmi_regulator_data pmp8074_regulators[] = {
Please sort the struct alphabletically.
drivers/regulator/qcom_spmi-regulator.c static const struct spmi_regulator_data pms405_regulators[] = { · line 2143
Quoted 3 lines
drivers/regulator/qcom_spmi-regulator.c +3
-0+ { "s3", 0x1a00, "vdd_s3"}, + { "s4", 0x1d00, "vdd_s4"}, + { "l11", 0x4a00, "vdd_l10_l11_l12_l13"},
Are the other regulators somehow not controllable through SPMI? Please leave a comment if that's the case.
drivers/regulator/qcom_spmi-regulator.c static const struct of_device_id qcom_spmi_regulator_match[] = { · line 2160
Quoted 11 lines
drivers/regulator/qcom_spmi-regulator.c +4
-0+ { } +}; +static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible ="qcom,pm8004-regulators" , .data = &pm8004_regulators }, { .compatible ="qcom,pm8005-regulators" , .data = &pm8005_regulators },@@ -2150,6 +2157,7 @@ static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible = "qcom,pm660-regulators", .data = &pm660_regulators }, { .compatible = "qcom,pm660l-regulators", .data = &pm660l_regulators }, { .compatible = "qcom,pms405-regulators", .data = &pms405_regulators }, + { .compatible = "qcom,pmp8074-regulators", .data = &pmp8074_regulators },
Please sort the compatible too.
Konrad
Quoted 4 lines
drivers/regulator/qcom_spmi-regulator.c +0
-0{ } };MODULE_DEVICE_TABLE (of, qcom_spmi_regulator_match);
Re: [PATCH v3 4/6] regulator: qcom_spmi: Add support for PMP8074 regulators
Quoted 25 lines · Konrad Dybcio
Quoted 22 lines · Robert Marko
PMP8074 is a companion PMIC for the Qualcomm IPQ8074 WiSoC-s.
It features 5 HF-SMPS and 13 LDO regulators.
This commit adds support for S3 and S4 HF-SMPS buck regulators of the HFS430 type and LDO11 of the
HT_P150type.
S3 is the CPU cluster voltage supply, S4 supplies the UBI32 NPU cores and LDO11 is the SDIO/eMMC I/O voltage regulator required for high speeds.Signed-off-by Robert Marko <[email protected]>--- drivers/regulator/qcom_spmi-regulator.c | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/regulator/qcom_spmi-regulator.c +0
-0@@ -2137,6 +2137,13 @@ static const struct spmi_regulator_data pms405_regulators[] = { { } };
Quoted 3 lines
drivers/regulator/qcom_spmi-regulator.c static const struct spmi_regulator_data pms405_regulators[] = { · line 2140
Quoted 1 line
drivers/regulator/qcom_spmi-regulator.c +1
-0+static const struct spmi_regulator_data pmp8074_regulators[] = {Please sort the struct alphabletically.
Hi,
Will fixup in v3.
Quoted 8 lines
drivers/regulator/qcom_spmi-regulator.c static const struct spmi_regulator_data pms405_regulators[] = { · line 2143
Quoted 5 lines
drivers/regulator/qcom_spmi-regulator.c +3
-0+ { "s3", 0x1a00, "vdd_s3"}, + { "s4", 0x1d00, "vdd_s4"}, + { "l11", 0x4a00, "vdd_l10_l11_l12_l13"},Are the other regulators somehow not controllable through SPMI? Please leave a comment if that's the case.
No, they are all controllable via SPMI as far as I know. Though the output table completely leaves out L7, L9, and L10. L5 and L6 are specified as Ebuck-4 subtypes (0x3d), while L10 is not listed at all (0x34).
These are not currently supported and I don't have enough information to support them.
L1, L2, L3, L4, L7, L8, L9, L11, L12, and L13 appear to have their subtype already supported.
L1, L2, L3, L8, L9 subtype (0x32)
L4 subtype (0x30)
L7, L11, L12, L13 subtype (0x35)
S3, S4, and L11 are the most important ones.
Quoted 15 lines
drivers/regulator/qcom_spmi-regulator.c static const struct of_device_id qcom_spmi_regulator_match[] = { · line 2160
Quoted 13 lines
drivers/regulator/qcom_spmi-regulator.c +4
-0+ { } +}; +static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible ="qcom,pm8004-regulators" , .data = &pm8004_regulators }, { .compatible ="qcom,pm8005-regulators" , .data = &pm8005_regulators },@@ -2150,6 +2157,7 @@ static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible = "qcom,pm660-regulators", .data = &pm660_regulators }, { .compatible = "qcom,pm660l-regulators", .data = &pm660l_regulators }, { .compatible = "qcom,pms405-regulators", .data = &pms405_regulators }, + { .compatible = "qcom,pmp8074-regulators", .data = &pmp8074_regulators },Please sort the compatible too.
Will fixup in v3.
Regards,
Robert
Quoted 8 lines
Konrad
Quoted 4 lines
drivers/regulator/qcom_spmi-regulator.c +0
-0{ } };MODULE_DEVICE_TABLE (of, qcom_spmi_regulator_match);
Re: [PATCH v3 4/6] regulator: qcom_spmi: Add support for PMP8074 regulators
Quoted 41 lines · Robert Marko
Quoted 25 lines · Konrad Dybcio
Quoted 22 lines · Robert Marko
PMP8074 is a companion PMIC for the Qualcomm IPQ8074 WiSoC-s.
It features 5 HF-SMPS and 13 LDO regulators.
This commit adds support for S3 and S4 HF-SMPS buck regulators of the HFS430 type and LDO11 of the
HT_P150type.
S3 is the CPU cluster voltage supply, S4 supplies the UBI32 NPU cores and LDO11 is the SDIO/eMMC I/O voltage regulator required for high speeds.Signed-off-by Robert Marko <[email protected]>--- drivers/regulator/qcom_spmi-regulator.c | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/regulator/qcom_spmi-regulator.c +0
-0@@ -2137,6 +2137,13 @@ static const struct spmi_regulator_data pms405_regulators[] = { { } };Quoted 3 lines
drivers/regulator/qcom_spmi-regulator.c static const struct spmi_regulator_data pms405_regulators[] = { · line 2140
Quoted 1 line
drivers/regulator/qcom_spmi-regulator.c +1
-0+static const struct spmi_regulator_data pmp8074_regulators[] = {Please sort the struct alphabletically.
Hi,
Will fixup in v3.Quoted 6 lines
Quoted 5 lines
drivers/regulator/qcom_spmi-regulator.c +3
-0+ { "s3", 0x1a00, "vdd_s3"}, + { "s4", 0x1d00, "vdd_s4"}, + { "l11", 0x4a00, "vdd_l10_l11_l12_l13"},
Quoted 7 lines
Quoted 2 lines
Are the other regulators somehow not controllable through SPMI? Please leave a comment if that's the case.
No, they are all controllable via SPMI as far as I know. Though the output table completely leaves out L7, L9, and L10. L5 and L6 are specified as Ebuck-4 subtypes (
0x3d), while L10 is not listed at all (0x34).
Ok, I dug a bit further and L5/6 are HT_P600 and are easily supportable. L10 is an HT_P50 type but it's listed as unused and left disabled, I don't know its supported output voltage range.
Regards,
Robert
Quoted 37 lines
These are not currently supported and I don't have enough information to support them.
L1, L2, L3, L4, L7, L8, L9, L11, L12, and L13 appear to have their subtype already supported.
L1, L2, L3, L8, L9 subtype (0x32)
L4 subtype (0x30)
L7, L11, L12, L13 subtype (0x35)S3, S4, and L11 are the most important ones.
Quoted 15 lines
drivers/regulator/qcom_spmi-regulator.c static const struct of_device_id qcom_spmi_regulator_match[] = { · line 2160
Quoted 13 lines
drivers/regulator/qcom_spmi-regulator.c +4
-0+ { } +}; +static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible ="qcom,pm8004-regulators" , .data = &pm8004_regulators }, { .compatible ="qcom,pm8005-regulators" , .data = &pm8005_regulators },@@ -2150,6 +2157,7 @@ static const struct of_device_id qcom_spmi_regulator_match[] = { { .compatible = "qcom,pm660-regulators", .data = &pm660_regulators }, { .compatible = "qcom,pm660l-regulators", .data = &pm660l_regulators }, { .compatible = "qcom,pms405-regulators", .data = &pms405_regulators }, + { .compatible = "qcom,pmp8074-regulators", .data = &pmp8074_regulators },Please sort the compatible too.
Will fixup in v3.
Regards,
RobertQuoted 8 lines
Konrad
Quoted 4 lines
drivers/regulator/qcom_spmi-regulator.c +0
-0{ } };MODULE_DEVICE_TABLE (of, qcom_spmi_regulator_match);
PATCH v3 5/6 arm64: dts: ipq8074: add SPMI PMP8074 PMIC regulators
In reply to Robert MarkoPMP8074 is used in IPQ8074 and provides S3 for cores, S4 for UBI core and LDO11 for SDIO/eMMC.
So, lets add the nodes in preparation for DVFS later.
--- arch/arm64/boot/dts/qcom/ipq8074.dtsi | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
arch/arm64/boot/dts/qcom/ipq8074.dtsi +34 -0
@@ -5,6 +5,7 @@ #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/qcom,gcc-ipq8074.h> +#include <dt-bindings/spmi/spmi.h> / { model = "Qualcomm Technologies, Inc. IPQ8074";
@@ -421,6 +422,39 @@ spmi_bus: spmi@200f000 { interrupt-controller; #interrupt-cells = <4>; cell-index = <0>; + + pmic@1 { + compatible ="qcom,spmi-pmic"; + reg = <0x1 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + regulators { + compatible = "qcom,pmp8074-regulators"; + + s3: s3 { + regulator-name = "vdd_s3"; + regulator-min-microvolt = <592000>; + regulator-max-microvolt = <1064000>; + regulator-always-on; + regulator-boot-on; + }; + + s4: s4 { + regulator-name = "vdd_s4"; + regulator-min-microvolt = <712000>; + regulator-max-microvolt = <992000>; + regulator-always-on; + regulator-boot-on; + }; + + l11: l11 { + regulator-name = "l11"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; sdhc_1: sdhci@7824900 {
Signature · 1 line
2.36.1
Re: [PATCH v3 5/6] arm64: dts: ipq8074: add SPMI PMP8074 PMIC regulators
Quoted 23 lines · Robert Marko
PMP8074 is used in IPQ8074 and provides S3 for cores, S4 for UBI core and LDO11 for SDIO/eMMC.
So, lets add the nodes in preparation for DVFS later.
Signed-off-by Robert Marko <[email protected]>--- arch/arm64/boot/dts/qcom/ipq8074.dtsi | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)arch/arm64/boot/dts/qcom/ipq8074.dtsi +1
-0@@ -5,6 +5,7 @@ #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/qcom,gcc-ipq8074.h> +#include <dt-bindings/spmi/spmi.h> / { model = "Qualcomm Technologies, Inc. IPQ8074";
arch/arm64/boot/dts/qcom/ipq8074.dtsi spmi_bus: spmi@200f000 { · line 426
Quoted 5 lines
arch/arm64/boot/dts/qcom/ipq8074.dtsi +2
-0@@ -421,6 +422,39 @@ spmi_bus: spmi@200f000 { interrupt-controller; #interrupt-cells = <4>; cell-index = <0>; + + pmic@1 {
Hi!
These nodes belong in the PMIC DTSI (check pm8150.dtsi and others alike for reference).
Konrad
Quoted 35 lines
arch/arm64/boot/dts/qcom/ipq8074.dtsi +31
-0+ compatible ="qcom,spmi-pmic"; + reg = <0x1 SPMI_USID>; + #address-cells = <1>; + #size-cells = <0>; + + regulators { + compatible = "qcom,pmp8074-regulators"; + + s3: s3 { + regulator-name = "vdd_s3"; + regulator-min-microvolt = <592000>; + regulator-max-microvolt = <1064000>; + regulator-always-on; + regulator-boot-on; + }; + + s4: s4 { + regulator-name = "vdd_s4"; + regulator-min-microvolt = <712000>; + regulator-max-microvolt = <992000>; + regulator-always-on; + regulator-boot-on; + }; + + l11: l11 { + regulator-name = "l11"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + }; + }; }; sdhc_1: sdhci@7824900 {
PATCH v3 6/6 arm64: dts: ipq8074: add VQMMC supply
In reply to Robert MarkoSDHCI controller claims DDR, HS200 and HS400 1.8V support, however it cannot achieve those using the 2.95V I/O that is the default set by firmware.
Since we know have access to the PMP8074 PMIC provided LDO that provides the I/O voltage set it as VQMMC supply so that higher speeds can actually be achieved.
--- arch/arm64/boot/dts/qcom/ipq8074.dtsi | 2 ++ 1 file changed, 2 insertions(+)
arch/arm64/boot/dts/qcom/ipq8074.dtsi +2 -0
@@ -476,6 +476,8 @@ sdhc_1: sdhci@7824900 { mmc-hs400-1_8v; bus-width = <8>; + vqmmc-supply = <&l11>; + status = "disabled"; };
Signature · 1 line
2.36.1
Quoted 22 lines · Robert Marko
Convert the bindings of Qualcomm SPMI regulators to DT schema.
Signed-off-by Robert Marko <[email protected]>+$id: http://devicetree.org/schemas/regulator/qcom,spmi-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml new file +15
-0+ +title: Qualcomm SPMI Regulators + +maintainers: + - Robert Marko <[email protected]> + +properties: + compatible: + enum: + - qcom,pm660-regulators + - qcom,pm660l-regulators + - qcom,pm8004-regulators + - qcom,pm8005-regulators + - qcom,pm8226-regulators + - qcom,pm8841-regulators
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml line 30
Quoted 10 lines
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml new file +10
-0+ - qcom,pm8916-regulators + - qcom,pm8941-regulators + - qcom,pm8950-regulators + - qcom,pm8994-regulators + - qcom,pmi8994-regulators + - qcom,pms405-regulators + + interrupts: true + + interrupt-names: true
I think we misunderstood each other. Old bindings indeed did not require the interrupts, although if present they should be always defined. Therefore here you should specify number of items and their names.
Rest looks ok
Best regards,
Krzysztof
Quoted 30 lines · Krzysztof Kozlowski
Quoted 28 lines · Robert Marko
Convert the bindings of Qualcomm SPMI regulators to DT schema.
Signed-off-by Robert Marko <[email protected]>+$id: http://devicetree.org/schemas/regulator/qcom,spmi-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml new file +21
-0+ +title: Qualcomm SPMI Regulators + +maintainers: + - Robert Marko <[email protected]> + +properties: + compatible: + enum: + - qcom,pm660-regulators + - qcom,pm660l-regulators + - qcom,pm8004-regulators + - qcom,pm8005-regulators + - qcom,pm8226-regulators + - qcom,pm8841-regulators + - qcom,pm8916-regulators + - qcom,pm8941-regulators + - qcom,pm8950-regulators + - qcom,pm8994-regulators + - qcom,pmi8994-regulators + - qcom,pms405-regulators
Quoted 8 lines
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml line 30
Quoted 4 lines
Documentation/devicetree/bindings/regulator/qcom,spmi-regulator.yaml new file +4
-0+ + interrupts: true + + interrupt-names: trueI think we misunderstood each other. Old bindings indeed did not require the interrupts, although if present they should be always defined. Therefore here you should specify number of items and their names.
Yeah, I think we are misunderstanding each other.
Old text-based bindings specified the interrupts, but no naming or number was enforced,
so I looked into the driver to see what is going on.
Only pm8941 has interrupts defined in the driver and DTS, so I added those based on compatible
matching, the same as with supplies.
My logic was that it was only valid for interrupts to be described if PM8941 was used as describing
interrupts for other regulator models will do nothing.
Regards,
Robert
Quoted 6 lines
Rest looks ok
Best regards,
Krzysztof
Quoted 6 lines · Robert Marko
Quoted 3 lines
I think we misunderstood each other. Old bindings indeed did not require the interrupts, although if present they should be always defined. Therefore here you should specify number of items and their names.
Yeah, I think we are misunderstanding each other.
Quoted 9 lines
Old text-based bindings specified the interrupts, but no naming or number was enforced,
so I looked into the driver to see what is going on.
Only pm8941 has interrupts defined in the driver and DTS, so I added those based on compatible
matching, the same as with supplies.
My logic was that it was only valid for interrupts to be described if PM8941 was used as describing
interrupts for other regulator models will do nothing.
Indeed, you're right, thanks for explanation. Your patch in such case is correct way of conversion but allows any number of interrupts with any names, so it's to relaxed. Maybe then better go to previous version, where these interrupts were defined only for one variant. For other variants they would fail on as unevaluated?
Best regards,
Krzysztof
Quoted 18 lines · Krzysztof Kozlowski
Quoted 6 lines · Robert Marko
Quoted 3 lines
I think we misunderstood each other. Old bindings indeed did not require the interrupts, although if present they should be always defined. Therefore here you should specify number of items and their names.
Yeah, I think we are misunderstanding each other.
Quoted 9 lines
Old text-based bindings specified the interrupts, but no naming or number was enforced,
so I looked into the driver to see what is going on.
Only pm8941 has interrupts defined in the driver and DTS, so I added those based on compatible
matching, the same as with supplies.
My logic was that it was only valid for interrupts to be described if PM8941 was used as describing
interrupts for other regulator models will do nothing.
Quoted 5 lines
Indeed, you're right, thanks for explanation. Your patch in such case is correct way of conversion but allows any number of interrupts with any names, so it's to relaxed. Maybe then better go to previous version, where these interrupts were defined only for one variant. For other variants they would fail on as unevaluated?
Yeah, that was my intention with not having interrupts as the generic property. I will remove them as generic property and only allow them per compatible, cause I tested
adding interrupts to a PMIC DTS that does not allow them and make dtbs_check will
warn about those being unevaluated.
Regards,
Robert
Quoted 3 lines
Best regards,
Krzysztof
Quoted 7 lines · Robert Marko
Yeah, that was my intention with not having interrupts as the generic property. I will remove them as generic property and only allow them per compatible, cause I tested
adding interrupts to a PMIC DTS that does not allow them and makedtbs_checkwill
warn about those being unevaluated.
Thanks, apologies for the confusion.
Best regards,
Krzysztof