diff mbox

[1/4] mfd: devicetree: bindings: Add Qualcomm RPM regulator subnodes

Message ID 1425356740-26285-2-git-send-email-bjorn.andersson@sonymobile.com
State Superseded, archived
Headers show

Commit Message

Bjorn Andersson March 3, 2015, 4:25 a.m. UTC
Add the regulator subnodes to the Qualcomm RPM MFD device tree bindings.

Signed-off-by: Bjorn Andersson <bjorn.andersson@sonymobile.com>
---

As the previously accepted binding didn't cover any functionality but
registering the mfd core there is no users, hence it's fine to drop the
two required fields at this time.

 Documentation/devicetree/bindings/mfd/qcom-rpm.txt | 201 +++++++++++++++++++--
 1 file changed, 189 insertions(+), 12 deletions(-)

Comments

Mark Brown March 3, 2015, 12:47 p.m. UTC | #1
On Mon, Mar 02, 2015 at 08:25:37PM -0800, Bjorn Andersson wrote:

> +- compatible:
> +	Usage: required
> +	Value type: <string>
> +	Definition: must be one of:
> +		    "qcom,rpm-pm8058-regulators"
> +		    "qcom,rpm-pm8901-regulators"
> +		    "qcom,rpm-pm8921-regulators"

Why do these subnodes have a compatible - do they ever appear except as
a child of a parent of the same type of device?
Bjorn Andersson March 3, 2015, 4:02 p.m. UTC | #2
On Tue 03 Mar 04:47 PST 2015, Mark Brown wrote:

> On Mon, Mar 02, 2015 at 08:25:37PM -0800, Bjorn Andersson wrote:
> 
> > +- compatible:
> > +	Usage: required
> > +	Value type: <string>
> > +	Definition: must be one of:
> > +		    "qcom,rpm-pm8058-regulators"
> > +		    "qcom,rpm-pm8901-regulators"
> > +		    "qcom,rpm-pm8921-regulators"
> 
> Why do these subnodes have a compatible - do they ever appear except as
> a child of a parent of the same type of device?

The relationship with the parent node is 1:M;

in the case of 8960/8064 there is only one PMIC controlled by the RPM,
hence the dt will look like:

rpm {
	compatible = "qcom,rpm-apq8960";

	regulators {
		compatible = "qcom,rpm-pm8921-regulators";
		...
	};
};

But for 8660, and later for e.g. 8974 we have something like:

rpm {
	compatible = "qcom,rpm-msm8660";

	pm8058-regulators {
		compatible = "qcom,rpm-pm8058-regulators";

		vdd_xxx-supply = <&pm8058_s4>;
		...
	};

	pm8901-regulators {
		compatible = "qcom,rpm-pm8901-regulators";
		...
	};
};

I intended to match these by name, having one rpm-regulator device
instance and using desc->regulators_node to match regulators in the
right node - with of_node being the rpm node.

But this doesn't really map to reality, as supplies are a property of
pm8058 and pm8901 and not of the rpm. I ended up writing some custom
device registering code to instantiate the right number of regulator
children and give each of them the right of_node etc.


But as several other of-based platforms have a compatible in their
regulators node I consider that a viable and cleaner solution.

Regards,
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Boyd March 3, 2015, 6:53 p.m. UTC | #3
On 03/02/15 20:25, Bjorn Andersson wrote:
>
> += SUBNODES
> +
> +The RPM exposes resources to its subnodes. The below bindings specify the set
> +of valid subnodes that can operate on these resources.
> +
> +== Regulators
> +
> +Regulator notes are identified by their compatible:
> +
> +- compatible:
> +	Usage: required
> +	Value type: <string>
> +	Definition: must be one of:
> +		    "qcom,rpm-pm8058-regulators"
> +		    "qcom,rpm-pm8901-regulators"
> +		    "qcom,rpm-pm8921-regulators"
> +
> +- vdd_l0_l1_lvs-supply:
> +- vdd_l10-supply:
> +- vdd_l13_l16-supply:
> +- vdd_l14_l15-supply:
> +- vdd_l17_l18-supply:
> +- vdd_l19_l20-supply:
> +- vdd_l21-supply:
> +- vdd_l22-supply:
> +- vdd_l23_l24_l25-supply:
> +- vdd_l2_l11_l12-supply:
> +- vdd_l3_l4_l5-supply:
> +- vdd_l6_l7-supply:
> +- vdd_l8-supply:
> +- vdd_l9-supply:
> +- vdd_ncp-supply:
> +- vdd_s0-supply:
> +- vdd_s1-supply:
> +- vdd_s2-supply:
> +- vdd_s3-supply:
> +- vdd_s4-supply:
> +	Usage: optional (pm8058 only)
> +	Value type: <phandle>
> +	Definition: reference to regulator supplying the input pin, as
> +		    described in the data sheet
> +
> +- vdd_l0-supply:
> +- vdd_l1-supply:
> +- vdd_l2-supply:
> +- vdd_l3-supply:
> +- vdd_l4-supply:
> +- vdd_l5-supply:
> +- vdd_l6-supply:
> +- vdd_s0-supply:
> +- vdd_s1-supply:
> +- vdd_s2-supply:
> +- vdd_s3-supply:
> +- vdd_s4-supply:
> +- lvs0_in-supply:
> +- lvs1_in-supply:
> +- lvs2_in-supply:
> +- lvs3_in-supply:
> +- mvs_in-supply:
> +	Usage: optional (pm8901 only)
> +	Value type: <phandle>
> +	Definition: reference to regulator supplying the input pin, as
> +		    described in the data sheet
> +
> +- vin_l1_l2_l12_l18-supply:
> +- vin_l24-supply:
> +- vin_l25-supply:
> +- vin_l27-supply:
> +- vin_l28-supply:
> +- vin_lvs_1_3_6-supply:
> +- vin_lvs2-supply:
> +- vin_lvs_4_5_7-supply:
> +- vin_ncp-supply:

Can you also include vin_s1,vin_s2, etc. for the rest of the supplies I
left out? It looks like you've covered all the inputs for the other pmics.

> +	Usage: optional (pm8921 only)
> +	Value type: <phandle>
> +	Definition: reference to regulator supplying the input pin, as
> +		    described in the data sheet
> +
> +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.
> +
Bjorn Andersson March 3, 2015, 9:54 p.m. UTC | #4
On Tue 03 Mar 10:53 PST 2015, Stephen Boyd wrote:

> On 03/02/15 20:25, Bjorn Andersson wrote:
[..]
> > +
> > +- vin_l1_l2_l12_l18-supply:
> > +- vin_l24-supply:
> > +- vin_l25-supply:
> > +- vin_l27-supply:
> > +- vin_l28-supply:
> > +- vin_lvs_1_3_6-supply:
> > +- vin_lvs2-supply:
> > +- vin_lvs_4_5_7-supply:
> > +- vin_ncp-supply:
> 
> Can you also include vin_s1,vin_s2, etc. for the rest of the supplies I
> left out? It looks like you've covered all the inputs for the other pmics.
> 

Sorry, I had problems finding the information in the rather sparse
documentation I have for the 8921, so I just assumed that I could steal
your list.

I finally managed to find the pinout diagram, so the correct list for
pm8921 seems to be:

- vdd_l1_2_12_18-supply
- vdd_l3_15_17-supply
- vdd_l5_8_16-supply
- vdd_l6_7-supply
- vdd_l9_11-supply
- vdd_l10_22-supply
- vdd_l21_23_29-supply
- vdd_l24-supply
- vdd_l25-supply
- vdd_l26-supply
- vdd_l27-supply
- vdd_l28-supply
- vdd_ncp-supply
- vdd_s1-supply
- vdd_s2-supply
- vdd_s4-supply
- vdd_s5-supply
- vdd_s6-supply
- vdd_s7-supply
- vdd_s8-supply
- vin_lvs1_3_6-supply
- vin_lvs2-supply
- vin_lvs4_5_7-supply

I will send out an updated patch with these.

Regards,
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Boyd March 3, 2015, 10:02 p.m. UTC | #5
On 03/03/15 13:54, Bjorn Andersson wrote:
> On Tue 03 Mar 10:53 PST 2015, Stephen Boyd wrote:
>
>> On 03/02/15 20:25, Bjorn Andersson wrote:
> [..]
>>> +
>>> +- vin_l1_l2_l12_l18-supply:
>>> +- vin_l24-supply:
>>> +- vin_l25-supply:
>>> +- vin_l27-supply:
>>> +- vin_l28-supply:
>>> +- vin_lvs_1_3_6-supply:
>>> +- vin_lvs2-supply:
>>> +- vin_lvs_4_5_7-supply:
>>> +- vin_ncp-supply:
>> Can you also include vin_s1,vin_s2, etc. for the rest of the supplies I
>> left out? It looks like you've covered all the inputs for the other pmics.
>>
> Sorry, I had problems finding the information in the rather sparse
> documentation I have for the 8921, so I just assumed that I could steal
> your list.
>
> I finally managed to find the pinout diagram, so the correct list for
> pm8921 seems to be:
>
> - vdd_l1_2_12_18-supply
> - vdd_l3_15_17-supply
> - vdd_l5_8_16-supply

vin_l4-supply?

> - vdd_l6_7-supply
> - vdd_l9_11-supply
> - vdd_l10_22-supply
> - vdd_l21_23_29-supply

Also these seem to be vin_l21_l23_l29 where "l" precedes all numbers
(for all the LDOs).

> - vdd_l24-supply
> - vdd_l25-supply
> - vdd_l26-supply
> - vdd_l27-supply
> - vdd_l28-supply
> - vdd_ncp-supply
> - vdd_s1-supply
> - vdd_s2-supply
> - vdd_s4-supply
> - vdd_s5-supply
> - vdd_s6-supply
> - vdd_s7-supply
> - vdd_s8-supply
> - vin_lvs1_3_6-supply
> - vin_lvs2-supply
> - vin_lvs4_5_7-supply
>
> I will send out an updated patch with these.

s/vdd/vin/ seems to match my datasheet.
Bjorn Andersson March 3, 2015, 10:17 p.m. UTC | #6
On Tue 03 Mar 14:02 PST 2015, Stephen Boyd wrote:

> On 03/03/15 13:54, Bjorn Andersson wrote:
> > On Tue 03 Mar 10:53 PST 2015, Stephen Boyd wrote:
> >
> >> On 03/02/15 20:25, Bjorn Andersson wrote:
> > [..]
> >>> +
> >>> +- vin_l1_l2_l12_l18-supply:
> >>> +- vin_l24-supply:
> >>> +- vin_l25-supply:
> >>> +- vin_l27-supply:
> >>> +- vin_l28-supply:
> >>> +- vin_lvs_1_3_6-supply:
> >>> +- vin_lvs2-supply:
> >>> +- vin_lvs_4_5_7-supply:
> >>> +- vin_ncp-supply:
> >> Can you also include vin_s1,vin_s2, etc. for the rest of the supplies I
> >> left out? It looks like you've covered all the inputs for the other pmics.
> >>
> > Sorry, I had problems finding the information in the rather sparse
> > documentation I have for the 8921, so I just assumed that I could steal
> > your list.
> >
> > I finally managed to find the pinout diagram, so the correct list for
> > pm8921 seems to be:
> >
> > - vdd_l1_2_12_18-supply
> > - vdd_l3_15_17-supply
> > - vdd_l5_8_16-supply
> 
> vin_l4-supply?
> 

Ahh, right, I missed the vdd_l4_l14 pad.

> > - vdd_l6_7-supply
> > - vdd_l9_11-supply
> > - vdd_l10_22-supply
> > - vdd_l21_23_29-supply
> 
> Also these seem to be vin_l21_l23_l29 where "l" precedes all numbers
> (for all the LDOs).
> 

The other pmics name their inputs like that; should we just pick that
naming scheme for all these supplies and be happy?

> > - vdd_l24-supply
> > - vdd_l25-supply
> > - vdd_l26-supply
> > - vdd_l27-supply
> > - vdd_l28-supply
> > - vdd_ncp-supply
> > - vdd_s1-supply
> > - vdd_s2-supply
> > - vdd_s4-supply
> > - vdd_s5-supply
> > - vdd_s6-supply
> > - vdd_s7-supply
> > - vdd_s8-supply
> > - vin_lvs1_3_6-supply
> > - vin_lvs2-supply
> > - vin_lvs4_5_7-supply
> >
> > I will send out an updated patch with these.
> 
> s/vdd/vin/ seems to match my datasheet.
> 

For all of these? Same with the other pmics?

These are the documented pad names that I have, nice to see that they
are named differently in different documents.

Regards,
Bjorn
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Boyd March 3, 2015, 11:25 p.m. UTC | #7
On 03/03/15 14:17, Bjorn Andersson wrote:
> On Tue 03 Mar 14:02 PST 2015, Stephen Boyd wrote:
>
>> On 03/03/15 13:54, Bjorn Andersson wrote:
>>> On Tue 03 Mar 10:53 PST 2015, Stephen Boyd wrote:
>>>
>>>> On 03/02/15 20:25, Bjorn Andersson wrote:
>>> [..]
>>>>> +
>>>>> +- vin_l1_l2_l12_l18-supply:
>>>>> +- vin_l24-supply:
>>>>> +- vin_l25-supply:
>>>>> +- vin_l27-supply:
>>>>> +- vin_l28-supply:
>>>>> +- vin_lvs_1_3_6-supply:
>>>>> +- vin_lvs2-supply:
>>>>> +- vin_lvs_4_5_7-supply:
>>>>> +- vin_ncp-supply:
>>>> Can you also include vin_s1,vin_s2, etc. for the rest of the supplies I
>>>> left out? It looks like you've covered all the inputs for the other pmics.
>>>>
>>> Sorry, I had problems finding the information in the rather sparse
>>> documentation I have for the 8921, so I just assumed that I could steal
>>> your list.
>>>
>>> I finally managed to find the pinout diagram, so the correct list for
>>> pm8921 seems to be:
>>>
>>> - vdd_l1_2_12_18-supply
>>> - vdd_l3_15_17-supply
>>> - vdd_l5_8_16-supply
>> vin_l4-supply?
>>
> Ahh, right, I missed the vdd_l4_l14 pad.
>
>>> - vdd_l6_7-supply
>>> - vdd_l9_11-supply
>>> - vdd_l10_22-supply
>>> - vdd_l21_23_29-supply
>> Also these seem to be vin_l21_l23_l29 where "l" precedes all numbers
>> (for all the LDOs).
>>
> The other pmics name their inputs like that; should we just pick that
> naming scheme for all these supplies and be happy?

Ok.

>>> - vdd_l24-supply
>>> - vdd_l25-supply
>>> - vdd_l26-supply
>>> - vdd_l27-supply
>>> - vdd_l28-supply
>>> - vdd_ncp-supply
>>> - vdd_s1-supply
>>> - vdd_s2-supply
>>> - vdd_s4-supply
>>> - vdd_s5-supply
>>> - vdd_s6-supply
>>> - vdd_s7-supply
>>> - vdd_s8-supply
>>> - vin_lvs1_3_6-supply
>>> - vin_lvs2-supply
>>> - vin_lvs4_5_7-supply
>>>
>>> I will send out an updated patch with these.
>> s/vdd/vin/ seems to match my datasheet.
>>
> For all of these? Same with the other pmics?
>
> These are the documented pad names that I have, nice to see that they
> are named differently in different documents.

Oh. I seem to have been looking at some pre-published doc that was still
laying around. vdd seems to match the official documentation so that
sounds good to me.
Mark Brown March 5, 2015, 12:33 a.m. UTC | #8
On Tue, Mar 03, 2015 at 08:02:51AM -0800, Bjorn Andersson wrote:

> rpm {
> 	compatible = "qcom,rpm-apq8960";
> 
> 	regulators {
> 		compatible = "qcom,rpm-pm8921-regulators";

Oh, so what you're saying is that the pm8921 is not actually a MFD at
all?  Why name it like a MFD component then?
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
index 85e3198..92bcd19 100644
--- a/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
+++ b/Documentation/devicetree/bindings/mfd/qcom-rpm.txt
@@ -31,16 +31,6 @@  frequencies.
 	Value type: <string-array>
 	Definition: must be the three strings "ack", "err" and "wakeup", in order
 
-- #address-cells:
-	Usage: required
-	Value type: <u32>
-	Definition: must be 1
-
-- #size-cells:
-	Usage: required
-	Value type: <u32>
-	Definition: must be 0
-
 - qcom,ipc:
 	Usage: required
 	Value type: <prop-encoded-array>
@@ -52,6 +42,172 @@  frequencies.
 		    - u32 representing the ipc bit within the register
 
 
+= SUBNODES
+
+The RPM exposes resources to its subnodes. The below bindings specify the set
+of valid subnodes that can operate on these resources.
+
+== Regulators
+
+Regulator notes are identified by their compatible:
+
+- compatible:
+	Usage: required
+	Value type: <string>
+	Definition: must be one of:
+		    "qcom,rpm-pm8058-regulators"
+		    "qcom,rpm-pm8901-regulators"
+		    "qcom,rpm-pm8921-regulators"
+
+- vdd_l0_l1_lvs-supply:
+- vdd_l10-supply:
+- vdd_l13_l16-supply:
+- vdd_l14_l15-supply:
+- vdd_l17_l18-supply:
+- vdd_l19_l20-supply:
+- vdd_l21-supply:
+- vdd_l22-supply:
+- vdd_l23_l24_l25-supply:
+- vdd_l2_l11_l12-supply:
+- vdd_l3_l4_l5-supply:
+- vdd_l6_l7-supply:
+- vdd_l8-supply:
+- vdd_l9-supply:
+- vdd_ncp-supply:
+- vdd_s0-supply:
+- vdd_s1-supply:
+- vdd_s2-supply:
+- vdd_s3-supply:
+- vdd_s4-supply:
+	Usage: optional (pm8058 only)
+	Value type: <phandle>
+	Definition: reference to regulator supplying the input pin, as
+		    described in the data sheet
+
+- vdd_l0-supply:
+- vdd_l1-supply:
+- vdd_l2-supply:
+- vdd_l3-supply:
+- vdd_l4-supply:
+- vdd_l5-supply:
+- vdd_l6-supply:
+- vdd_s0-supply:
+- vdd_s1-supply:
+- vdd_s2-supply:
+- vdd_s3-supply:
+- vdd_s4-supply:
+- lvs0_in-supply:
+- lvs1_in-supply:
+- lvs2_in-supply:
+- lvs3_in-supply:
+- mvs_in-supply:
+	Usage: optional (pm8901 only)
+	Value type: <phandle>
+	Definition: reference to regulator supplying the input pin, as
+		    described in the data sheet
+
+- vin_l1_l2_l12_l18-supply:
+- vin_l24-supply:
+- vin_l25-supply:
+- vin_l27-supply:
+- vin_l28-supply:
+- vin_lvs_1_3_6-supply:
+- vin_lvs2-supply:
+- vin_lvs_4_5_7-supply:
+- vin_ncp-supply:
+	Usage: optional (pm8921 only)
+	Value type: <phandle>
+	Definition: reference to regulator supplying the input pin, as
+		    described in the data sheet
+
+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.
+
+pm8058:
+	l0, 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, s0, s1, s2, s3, s4,
+	lvs0, lvs1, ncp
+
+pm8901:
+	l0, l1, l2, l3, l4, l5, l6, s0, s1, s2, s3, s4, lvs0, lvs1, lvs2, lvs3,
+	mvs
+
+pm8921:
+	s1, s2, s3, s4, s7, s8, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
+	l12, l14, l15, l16, l17, l18, l21, l22, l23, l24, l25, l26, l27, l28,
+	l29, lvs1, lvs2, lvs3, lvs4, lvs5, lvs6, lvs7, usb-switch, hdmi-switch,
+	ncp
+
+The content of each sub-node is defined by the standard binding for regulators -
+see regulator.txt - with additional custom properties described below:
+
+=== Switch-mode Power Supply regulator custom properties
+
+- bias-pull-down:
+	Usage: optional
+	Value type: <empty>
+	Definition: enable pull down of the regulator when inactive
+
+- qcom,switch-mode-frequency:
+	Usage: required
+	Value type: <u32>
+	Definition: Frequency (Hz) of the switch-mode power supply;
+		    must be one of:
+		    19200000, 9600000, 6400000, 4800000, 3840000, 3200000,
+		    2740000, 2400000, 2130000, 1920000, 1750000, 1600000,
+		    1480000, 1370000, 1280000, 1200000
+
+- qcom,force-mode:
+	Usage: optional (default if no other qcom,force-mode is specified)
+	Value type: <u32>
+	Defintion: indicates that the regulator should be forced to a
+		   particular mode, valid values are:
+		   QCOM_RPM_FORCE_MODE_NONE - do not force any mode
+		   QCOM_RPM_FORCE_MODE_LPM - force into low power mode
+		   QCOM_RPM_FORCE_MODE_HPM - force into high power mode
+		   QCOM_RPM_FORCE_MODE_AUTO - allow regulator to automatically
+					      select its own mode based on
+					      realtime current draw, only for:
+					      pm8921 smps and ftsmps
+
+- qcom,power-mode-hysteretic:
+	Usage: optional
+	Value type: <empty>
+	Definition: select that the power supply should operate in hysteretic
+		    mode, instead of the default pwm mode
+
+=== Low-dropout regulator custom properties
+
+- bias-pull-down:
+	Usage: optional
+	Value type: <empty>
+	Definition: enable pull down of the regulator when inactive
+
+- qcom,force-mode:
+	Usage: optional
+	Value type: <u32>
+	Defintion: indicates that the regulator should not be forced to any
+		   particular mode, valid values are:
+		   QCOM_RPM_FORCE_MODE_NONE - do not force any mode
+		   QCOM_RPM_FORCE_MODE_LPM - force into low power mode
+		   QCOM_RPM_FORCE_MODE_HPM - force into high power mode
+		   QCOM_RPM_FORCE_MODE_BYPASS - set regulator to use bypass
+						mode, i.e.  to act as a switch
+						and not regulate, only for:
+						pm8921 pldo, nldo and nldo1200
+
+=== Negative Charge Pump custom properties
+
+- qcom,switch-mode-frequency:
+	Usage: required
+	Value type: <u32>
+	Definition: Frequency (Hz) of the swith mode power supply;
+		    must be one of:
+		    19200000, 9600000, 6400000, 4800000, 3840000, 3200000,
+		    2740000, 2400000, 2130000, 1920000, 1750000, 1600000,
+		    1480000, 1370000, 1280000, 1200000
+
 = EXAMPLE
 
 	#include <dt-bindings/mfd/qcom-rpm.h>
@@ -64,7 +220,28 @@  frequencies.
 		interrupts = <0 19 0>, <0 21 0>, <0 22 0>;
 		interrupt-names = "ack", "err", "wakeup";
 
-		#address-cells = <1>;
-		#size-cells = <0>;
+		regulators {
+			compatible = "qcom,rpm-pm8921-regulators";
+			vin_l1_l2_l12_l18-supply = <&pm8921_s4>;
+
+			s1 {
+				regulator-min-microvolt = <1225000>;
+				regulator-max-microvolt = <1225000>;
+
+				bias-pull-down;
+
+				qcom,switch-mode-frequency = <3200000>;
+			};
+
+			pm8921_s4: s4 {
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				qcom,switch-mode-frequency = <1600000>;
+				bias-pull-down;
+
+				qcom,force-mode = <QCOM_RPM_FORCE_MODE_AUTO>;
+			};
+		};
 	};