Commit 416e05e5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull regulator updates from Mark Brown:
 "This has been a fairly quiet release for the regulator API, a few new
  drivers and a small API update:

   - Support for specifying an initial load as part of requesting
     regulators through the bulk API

   - Support for Maxim MAX597x, Qualcomm PM8074, PM8909 and Realtek
     RT5120 devices"

* tag 'regulator-v5.20' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (35 commits)
  regulator: core: Allow drivers to define their init data as const
  regulator: core: Allow specifying an initial load w/ the bulk API
  regulator: mt6380: Fix unused array warning
  regulator: Add missing type for 'regulator-microvolt-offset'
  regulator: core: Fix off-on-delay-us for always-on/boot-on regulators
  regulator: of: Fix refcount leak bug in of_get_regulation_constraints()
  regulator: pwm: Update Lee Jones' email address
  regulator: max597x: Don't return uninitialized variable in .probe
  regulator: qcom,spmi-regulator: add PMP8074 PMIC
  regulator: qcom,spmi-regulator: Convert to dtschema
  regulator: qcom_spmi: add support for PMP8074 regulators
  regulator: qcom_spmi: add support for HT_P600
  regulator: qcom_spmi: add support for HT_P150
  regulator: max597x: Remove unused including <linux/version.h>
  regulator: Fix MFD_MAX597X dependency
  regulator: Fix parameter declaration and spelling mistake.
  regulator: max597x: Add support for max597x regulator
  regulator: scmi: Add missing of_node_get()
  regulator: qcom_smd: Add PM8909 RPM regulators
  regulator: dt-bindings: qcom,smd-rpm: Add PM8909
  ...
parents 2e7a9515 efc93392
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ properties:
  compatible:
    enum:
      - mps,mp5416
      - mps,mp5496

  reg:
    maxItems: 1
+0 −92
Original line number Diff line number Diff line
Bindings for the Generic PWM Regulator
======================================

Currently supports 2 modes of operation:

Voltage Table:		When in this mode, a voltage table (See below) of
			predefined voltage <=> duty-cycle values must be
			provided via DT. Limitations are that the regulator can
			only operate at the voltages supplied in the table.
			Intermediary duty-cycle values which would normally
			allow finer grained voltage selection are ignored and
			rendered useless.  Although more control is given to
			the user if the assumptions made in continuous-voltage
			mode do not reign true.

Continuous Voltage:	This mode uses the regulator's maximum and minimum
			supplied voltages specified in the
			regulator-{min,max}-microvolt properties to calculate
			appropriate duty-cycle values.  This allows for a much
			more fine grained solution when compared with
			voltage-table mode above.  This solution does make an
			assumption that a %50 duty-cycle value will cause the
			regulator voltage to run at half way between the
			supplied max_uV and min_uV values.

Required properties:
--------------------
- compatible:		Should be "pwm-regulator"

- pwms:			PWM specification (See: ../pwm/pwm.txt)

Only required for Voltage Table Mode:
- voltage-table: 	Voltage and Duty-Cycle table consisting of 2 cells
			    First cell is voltage in microvolts (uV)
			    Second cell is duty-cycle in percent (%)

Optional properties for Continuous mode:
- pwm-dutycycle-unit:	Integer value encoding the duty cycle unit. If not
			defined, <100> is assumed, meaning that
			pwm-dutycycle-range contains values expressed in
			percent.

- pwm-dutycycle-range:	Should contain 2 entries. The first entry is encoding
			the dutycycle for regulator-min-microvolt and the
			second one the dutycycle for regulator-max-microvolt.
			Duty cycle values are expressed in pwm-dutycycle-unit.
			If not defined, <0 100> is assumed.

NB: To be clear, if voltage-table is provided, then the device will be used
in Voltage Table Mode.  If no voltage-table is provided, then the device will
be used in Continuous Voltage Mode.

Optional properties:
--------------------
- enable-gpios:		GPIO to use to enable/disable the regulator

Any property defined as part of the core regulator binding can also be used.
(See: ../regulator/regulator.txt)

Continuous Voltage With Enable GPIO Example:
	pwm_regulator {
		compatible = "pwm-regulator";
		pwms = <&pwm1 0 8448 0>;
		enable-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
		regulator-min-microvolt = <1016000>;
		regulator-max-microvolt = <1114000>;
		regulator-name = "vdd_logic";
		/* unit == per-mille */
		pwm-dutycycle-unit = <1000>;
		/*
		 * Inverted PWM logic, and the duty cycle range is limited
		 * to 30%-70%.
		 */
		pwm-dutycycle-range = <700 300>; /* */
	};

Voltage Table Example:
	pwm_regulator {
		compatible = "pwm-regulator";
		pwms = <&pwm1 0 8448 0>;
		regulator-min-microvolt = <1016000>;
		regulator-max-microvolt = <1114000>;
		regulator-name = "vdd_logic";

			      /* Voltage Duty-Cycle */
		voltage-table = <1114000 0>,
				<1095000 10>,
				<1076000 20>,
				<1056000 30>,
				<1036000 40>,
				<1016000 50>;
	};
+126 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/pwm-regulator.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Bindings for the Generic PWM Regulator

maintainers:
  - Brian Norris <briannorris@chromium.org>
  - Lee Jones <lee@kernel.org>
  - Alexandre Courbot <acourbot@nvidia.com>

description: |
  Currently supports 2 modes of operation:

  Voltage Table:
    When in this mode, a voltage table (See below) of predefined voltage <=>
    duty-cycle values must be provided via DT. Limitations are that the
    regulator can only operate at the voltages supplied in the table.
    Intermediary duty-cycle values which would normally allow finer grained
    voltage selection are ignored and rendered useless.  Although more control
    is given to the user if the assumptions made in continuous-voltage mode do
    not reign true.

  Continuous Voltage:
    This mode uses the regulator's maximum and minimum supplied voltages
    specified in the regulator-{min,max}-microvolt properties to calculate
    appropriate duty-cycle values.  This allows for a much more fine grained
    solution when compared with voltage-table mode above.  This solution does
    make an assumption that a %50 duty-cycle value will cause the regulator
    voltage to run at half way between the supplied max_uV and min_uV values.

  If voltage-table is provided, then the device will be used in Voltage Table
  Mode.  If no voltage-table is provided, then the device will be used in
  Continuous Voltage Mode.

allOf:
  - $ref: regulator.yaml#

properties:
  compatible:
    const: pwm-regulator

  pwms:
    maxItems: 1

  voltage-table:
    description: Voltage and Duty-Cycle table.
    $ref: /schemas/types.yaml#/definitions/uint32-matrix
    items:
      items:
        - description: voltage in microvolts (uV)
        - description: duty-cycle in percent (%)

  enable-gpios:
    description: Regulator enable GPIO
    maxItems: 1

   # Optional properties for Continuous mode:
  pwm-dutycycle-unit:
    description:
      Integer value encoding the duty cycle unit. If not
        defined, <100> is assumed, meaning that
        pwm-dutycycle-range contains values expressed in
        percent.
    default: 100

  pwm-dutycycle-range:
    description:
      Should contain 2 entries. The first entry is encoding
        the dutycycle for regulator-min-microvolt and the
        second one the dutycycle for regulator-max-microvolt.
        Duty cycle values are expressed in pwm-dutycycle-unit.
        If not defined, <0 100> is assumed.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    items:
      - description: the dutycycle for regulator-min-microvolt
      - description: the dutycycle for regulator-max-microvolt
    default: [ 0 100 ]

required:
  - compatible
  - pwms

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

    // Continuous Voltage With Enable GPIO Example:
    regulator {
        compatible = "pwm-regulator";
        pwms = <&pwm1 0 8448 0>;
        enable-gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
        regulator-min-microvolt = <1016000>;
        regulator-max-microvolt = <1114000>;
        regulator-name = "vdd_logic";
        /* unit == per-mille */
        pwm-dutycycle-unit = <1000>;
        /*
        * Inverted PWM logic, and the duty cycle range is limited
        * to 30%-70%.
        */
        pwm-dutycycle-range = <700 300>; /* */
    };

  - |
    // Voltage Table Example:
    regulator {
        compatible = "pwm-regulator";
        pwms = <&pwm1 0 8448 0>;
        regulator-min-microvolt = <1016000>;
        regulator-max-microvolt = <1114000>;
        regulator-name = "vdd_logic";

                /* Voltage Duty-Cycle */
        voltage-table = <1114000 0>,
            <1095000 10>,
            <1076000 20>,
            <1056000 30>,
            <1036000 40>,
            <1016000 50>;
    };
...
+4 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ description:

  For pm8841, s1, s2, s3, s4, s5, s6, s7, s8

  For pm8909, s1, s2, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13,
  l14, l15, l17, l18

  For pm8916, s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
  l12, l13, l14, l15, l16, l17, l18

@@ -78,6 +81,7 @@ properties:
      - qcom,rpm-mp5496-regulators
      - qcom,rpm-pm8226-regulators
      - qcom,rpm-pm8841-regulators
      - qcom,rpm-pm8909-regulators
      - qcom,rpm-pm8916-regulators
      - qcom,rpm-pm8941-regulators
      - qcom,rpm-pm8950-regulators
+0 −347
Original line number Diff line number Diff line
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>;
		};
	};
Loading