Skip to contentSkip to conversation

dt-bindings: regulator: qcom,spmi-regulator: Convert to dtschema

PATCH Superseded Robert Marko 3 participants 16 messages May 17, 2022 – May 18, 2022

Subsystems (4)

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

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
deleted file mode 100644
index c2a39b121b1b..000000000000
@@ -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
#1 lore raw

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
index 02bfce981150..38bbc70241ae 100644
@@ -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
#2 lore raw

PATCH v3 3/6 dt-bindings: regulator: qcom,spmi-regulator: add PMP8074 PMIC

In reply to Robert Marko

Document 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
index 7f51e305eaae..334ba9e5e177 100644
@@ -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
#4 lore raw

PATCH v3 4/6 regulator: qcom_spmi: Add support for PMP8074 regulators

In reply to 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_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
index 38bbc70241ae..696b088aae40 100644
@@ -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
#5 lore raw

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_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 +0 -0
index 38bbc70241ae..696b088aae40 100644

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);
#6 lore raw

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_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 +0 -0
index 38bbc70241ae..696b088aae40 100644
@@ -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);
#7 lore raw

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_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 +0 -0
index 38bbc70241ae..696b088aae40 100644
@@ -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,
Robert

Quoted 8 lines

Konrad

Quoted 4 lines
drivers/regulator/qcom_spmi-regulator.c +0 -0
      { }
  };
  MODULE_DEVICE_TABLE(of, qcom_spmi_regulator_match);
#8 lore raw

PATCH v3 5/6 arm64: dts: ipq8074: add SPMI PMP8074 PMIC regulators

In reply to 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.

---
 arch/arm64/boot/dts/qcom/ipq8074.dtsi | 34 +++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
arch/arm64/boot/dts/qcom/ipq8074.dtsi +34 -0
index 789fec7c6aa4..d1a0b77c38a4 100644
@@ -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
#9 lore raw

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.

---
  arch/arm64/boot/dts/qcom/ipq8074.dtsi | 34 +++++++++++++++++++++++++++
  1 file changed, 34 insertions(+)
arch/arm64/boot/dts/qcom/ipq8074.dtsi +1 -0
index 789fec7c6aa4..d1a0b77c38a4 100644
@@ -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 {
#10 lore raw

PATCH v3 6/6 arm64: dts: ipq8074: add VQMMC supply

In reply to Robert Marko

SDHCI 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
index d1a0b77c38a4..fea3c4ee3565 100644
@@ -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
#11 lore raw
In reply to Robert Marko
Quoted 22 lines · Robert Marko

Convert the bindings of Qualcomm SPMI regulators to DT schema.

+$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

#12 lore raw
Quoted 30 lines · Krzysztof Kozlowski
Quoted 28 lines · Robert Marko

Convert the bindings of Qualcomm SPMI regulators to DT schema.

+$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: 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.

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

#13 lore raw
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

#14 lore raw
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

#15 lore raw
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 make dtbs_check will
warn about those being unevaluated.

Thanks, apologies for the confusion.

Best regards,
Krzysztof