Commit 2dda5700 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull regulator updates from Mark Brown:
 "This has been a quiet release for the regulator API, a few new drivers
  and the usual fixes and cleanup traffic but not much else going on:

   - Optimisations for the handling of voltage enumeration, especially
     with sparse selector sets, from Claudiu Beznea.

   - Support for several ARM SCMI regulators, Dialog DA9121, NXP PF8x00,
     Qualcomm PMX55, PM8350 and PM8350c

  The addition of the SCMI regulator driver (which controls regulators
  via system firmware) means that we've pulled in the support for the
  underlying firmware operations from the firmware tree"

* tag 'regulator-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (53 commits)
  regulator: mc13892-regulator: convert comma to semicolon
  regulator: pfuze100: Convert the driver to DT-only
  regulator: max14577: Add proper module aliases strings
  regulator: da9121: Potential Oops in da9121_assign_chip_model()
  regulator: da9121: Fix index used for DT property
  regulator: da9121: Remove uninitialised string variable
  regulator: axp20x: Fix DLDO2 voltage control register mask for AXP22x
  regulator: qcom-rpmh: Add support for PM8350/PM8350c
  regulator: dt-bindings: Add PM8350x compatibles
  regulator: da9121: include linux/gpio/consumer.h
  regulator: da9121: Mark some symbols with static keyword
  regulator: da9121: Request IRQ directly and free in release function to avoid masking race
  regulator: da9121: add interrupt support
  regulator: da9121: add mode support
  regulator: da9121: add current support
  regulator: da9121: Update registration to support multiple buck variants
  regulator: da9121: Add support for device variants via devicetree
  regulator: da9121: Add device variant descriptors
  regulator: da9121: Add device variant regmaps
  regulator: da9121: Add device variants
  ...
parents a45f1d43 5e999f10
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -62,6 +62,20 @@ Required properties:
 - #power-domain-cells : Should be 1. Contains the device or the power
			 domain ID value used by SCMI commands.

Regulator bindings for the SCMI Regulator based on SCMI Message Protocol
------------------------------------------------------------
An SCMI Regulator is permanently bound to a well defined SCMI Voltage Domain,
and should be always positioned as a root regulator.
It does not support any current operation.

SCMI Regulators are grouped under a 'regulators' node which in turn is a child
of the SCMI Voltage protocol node inside the desired SCMI instance node.

This binding uses the common regulator binding[6].

Required properties:
 - reg : shall identify an existent SCMI Voltage Domain.

Sensor bindings for the sensors based on SCMI Message Protocol
--------------------------------------------------------------
SCMI provides an API to access the various sensors on the SoC.
@@ -105,6 +119,7 @@ Required sub-node properties:
[3] Documentation/devicetree/bindings/thermal/thermal*.yaml
[4] Documentation/devicetree/bindings/sram/sram.yaml
[5] Documentation/devicetree/bindings/reset/reset.txt
[6] Documentation/devicetree/bindings/regulator/regulator.yaml

Example:

@@ -169,6 +184,25 @@ firmware {
			reg = <0x16>;
			#reset-cells = <1>;
		};

		scmi_voltage: protocol@17 {
			reg = <0x17>;

			regulators {
				regulator_devX: regulator@0 {
					reg = <0x0>;
					regulator-max-microvolt = <3300000>;
				};

				regulator_devY: regulator@9 {
					reg = <0x9>;
					regulator-min-microvolt = <500000>;
					regulator-max-microvolt = <4200000>;
				};

				...
			};
		};
	};
};

+189 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/dlg,da9121.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Dialog Semiconductor DA9121 voltage regulator

maintainers:
  - Adam Ward <Adam.Ward.opensource@diasemi.com>

description: |
  Dialog Semiconductor DA9121 Single-channel 10A double-phase buck converter
  Dialog Semiconductor DA9122 Double-channel  5A single-phase buck converter
  Dialog Semiconductor DA9220 Double-channel  3A single-phase buck converter
  Dialog Semiconductor DA9217 Single-channel  6A double-phase buck converter
  Dialog Semiconductor DA9130 Single-channel 10A double-phase buck converter
  Dialog Semiconductor DA9131 Double-channel  5A single-phase buck converter
  Dialog Semiconductor DA9132 Double-channel  3A single-phase buck converter

  Current limits

  This is PER PHASE, and the current limit setting in the devices reflect
  that with a maximum 10A limit. Allowing for transients at/near double
  the rated current, this translates across the device range to per
  channel figures as so...

                               | DA9121    DA9122     DA9220    DA9217   DA9140
                               | /DA9130   /DA9131    /DA9132
    -----------------------------------------------------------------------------
    Output current / channel   | 10000000   5000000   3000000   6000000  40000000
    Output current / phase     |  5000000   5000000   3000000   3000000   9500000
    -----------------------------------------------------------------------------
    Min regulator-min-microvolt|   300000    300000    300000    300000    500000
    Max regulator-max-microvolt|  1900000   1900000   1900000   1900000   1000000
    Device hardware default    |  1000000   1000000   1000000   1000000   1000000
    -----------------------------------------------------------------------------
    Min regulator-min-microamp |  7000000   3500000   3500000   7000000  26000000
    Max regulator-max-microamp | 20000000  10000000   6000000  12000000  78000000
    Device hardware default    | 15000000   7500000   5500000  11000000  58000000

properties:
  $nodename:
    pattern: "pmic@[0-9a-f]{1,2}"
  compatible:
    enum:
      - dlg,da9121
      - dlg,da9122
      - dlg,da9220
      - dlg,da9217
      - dlg,da9130
      - dlg,da9131
      - dlg,da9132
      - dlg,da9140

  reg:
    maxItems: 1
    description: Specifies the I2C slave address.

  interrupts:
    maxItems: 1
    description: IRQ line information.

  dlg,irq-polling-delay-passive-ms:
    $ref: "/schemas/types.yaml#/definitions/uint32"
    minimum: 1000
    maximum: 10000
    description: |
      Specify the polling period, measured in milliseconds, between interrupt status
      update checks. Range 1000-10000 ms.

  regulators:
    type: object
    $ref: regulator.yaml#
    description: |
      This node defines the settings for the BUCK. The content of the
      sub-node is defined by the standard binding for regulators; see regulator.yaml.
      The DA9121 regulator is bound using their names listed below
      buck1 - BUCK1
      buck2 - BUCK2       //DA9122, DA9220, DA9131, DA9132 only

    patternProperties:
      "^buck([1-2])$":
        type: object
        $ref: regulator.yaml#

        properties:
          regulator-mode:
            maxItems: 1
            description: Defined in include/dt-bindings/regulator/dlg,da9121-regulator.h

          regulator-initial-mode:
            maxItems: 1
            description: Defined in include/dt-bindings/regulator/dlg,da9121-regulator.h

          enable-gpios:
            maxItems: 1
            description: Specify a valid GPIO for platform control of the regulator

          dlg,ripple-cancel:
            $ref: "/schemas/types.yaml#/definitions/uint32"
            description: |
              Defined in include/dt-bindings/regulator/dlg,da9121-regulator.h
              Only present on multi-channel devices (DA9122, DA9220, DA9131, DA9132)

        unevaluatedProperties: false

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/regulator/dlg,da9121-regulator.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      pmic@68 {
        compatible = "dlg,da9121";
        reg = <0x68>;

        interrupt-parent = <&gpio6>;
        interrupts = <11 IRQ_TYPE_LEVEL_LOW>;

        dlg,irq-polling-delay-passive-ms = <2000>;

        regulators {
          DA9121_BUCK1: buck1 {
            regulator-name = "BUCK1";
            regulator-min-microvolt = <300000>;
            regulator-max-microvolt = <1900000>;
            regulator-min-microamp = <7000000>;
            regulator-max-microamp = <20000000>;
            regulator-boot-on;
            regulator-initial-mode = <DA9121_BUCK_MODE_AUTO>;
            enable-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
          };
        };
      };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/regulator/dlg,da9121-regulator.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      pmic@68 {
        compatible = "dlg,da9122";
        reg = <0x68>;

        interrupt-parent = <&gpio6>;
        interrupts = <11 IRQ_TYPE_LEVEL_LOW>;

        dlg,irq-polling-delay-passive-ms = <2000>;

        regulators {
          DA9122_BUCK1: buck1 {
            regulator-name = "BUCK1";
            regulator-min-microvolt = <300000>;
            regulator-max-microvolt = <1900000>;
            regulator-min-microamp = <3500000>;
            regulator-max-microamp = <10000000>;
            regulator-boot-on;
            regulator-initial-mode = <DA9121_BUCK_MODE_AUTO>;
            enable-gpios = <&gpio6 1 GPIO_ACTIVE_HIGH>;
            dlg,ripple-cancel = <DA9121_BUCK_RIPPLE_CANCEL_NONE>;
          };
          DA9122_BUCK2: buck2 {
            regulator-name = "BUCK2";
            regulator-min-microvolt = <300000>;
            regulator-max-microvolt = <1900000>;
            regulator-min-microamp = <3500000>;
            regulator-max-microamp = <10000000>;
            regulator-boot-on;
            regulator-initial-mode = <DA9121_BUCK_MODE_AUTO>;
            enable-gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>;
            dlg,ripple-cancel = <DA9121_BUCK_RIPPLE_CANCEL_NONE>;
          };
        };
      };
    };
...
+47 −0
Original line number Diff line number Diff line
@@ -26,12 +26,22 @@ if:
        const: regulator-fixed-clock
  required:
    - clocks
else:
  if:
    properties:
      compatible:
        contains:
          const: regulator-fixed-domain
    required:
      - power-domains
      - required-opps

properties:
  compatible:
    enum:
      - regulator-fixed
      - regulator-fixed-clock
      - regulator-fixed-domain

  regulator-name: true

@@ -46,6 +56,20 @@ properties:
      is mandatory if compatible is chosen to regulator-fixed-clock.
    maxItems: 1

  power-domains:
    description:
      Power domain to use for enable control. This binding is only
      available if the compatible is chosen to regulator-fixed-domain.
    maxItems: 1

  required-opps:
    description:
      Performance state to use for enable control. This binding is only
      available if the compatible is chosen to regulator-fixed-domain. The
      power-domain binding is mandatory if compatible is chosen to
      regulator-fixed-domain.
    maxItems: 1

  startup-delay-us:
    description: startup time in microseconds
    $ref: /schemas/types.yaml#/definitions/uint32
@@ -89,4 +113,27 @@ examples:
      gpio-open-drain;
      vin-supply = <&parent_reg>;
    };
    reg_1v8_clk: regulator-1v8-clk {
      compatible = "regulator-fixed-clock";
      regulator-name = "1v8";
      regulator-min-microvolt = <1800000>;
      regulator-max-microvolt = <1800000>;
      clocks = <&clock1>;
      startup-delay-us = <70000>;
      enable-active-high;
      regulator-boot-on;
      vin-supply = <&parent_reg>;
    };
    reg_1v8_domain: regulator-1v8-domain {
      compatible = "regulator-fixed-domain";
      regulator-name = "1v8";
      regulator-min-microvolt = <1800000>;
      regulator-max-microvolt = <1800000>;
      power-domains = <&domain1>;
      required-opps = <&domain1_state1>;
      startup-delay-us = <70000>;
      enable-active-high;
      regulator-boot-on;
      vin-supply = <&parent_reg>;
    };
...
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ Required properties:
              name. The content of each sub-node is defined by the
              standard binding for regulators; see regulator.txt.

Regualtors of MCP16502 PMIC:
Regulators of MCP16502 PMIC:
1) VDD_IO	- Buck (1.2 - 3.7 V)
2) VDD_DDR	- Buck (0.6 - 1.85 V)
3) VDD_CORE	- Buck (0.6 - 1.85 V)
+211 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/nxp,pf8x00-regulator.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: NXP PF8100/PF8121A/PF8200 PMIC regulators

maintainers:
  - Jagan Teki <jagan@amarulasolutions.com>
  - Troy Kisky <troy.kisky@boundarydevices.com>

description: |
  PF8100/PF8121A/PF8200 is a PMIC designed for highperformance consumer
  applications. It features seven high efficiency buck converters, four
  linear and one vsnvs regulators. It has built-in one time programmable
  fuse bank for device configurations.

properties:
  compatible:
    enum:
      - nxp,pf8x00

  reg:
    maxItems: 1

  regulators:
    type: object
    description: |
      list of regulators provided by this controller

    patternProperties:
      "^ldo[1-4]$":
        type: object
        $ref: regulator.yaml#
        description:
          Properties for single LDO regulator.

        properties:
          regulator-name:
            pattern: "^ldo[1-4]$"
            description:
              should be "ldo1", ..., "ldo4"

        unevaluatedProperties: false

      "^buck[1-7]$":
        type: object
        $ref: regulator.yaml#
        description:
          Properties for single BUCK regulator.

        properties:
          regulator-name:
            pattern: "^buck[1-7]$"
            description:
              should be "buck1", ..., "buck7"

          nxp,ilim-ma:
            $ref: "/schemas/types.yaml#/definitions/uint32"
            minimum: 2100
            maximum: 4500
            description:
              BUCK regulators current limit in mA.

              Listed current limits in mA are,
              2100 (default)
              2600
              3000
              4500

          nxp,phase-shift:
            $ref: "/schemas/types.yaml#/definitions/uint32"
            minimum: 45
            maximum: 0
            description:
              BUCK regulators phase shift control in degrees.

              Listed phase shift control values in degrees are,
              45
              90
              135
              180
              225
              270
              315
              0 (default)

        unevaluatedProperties: false

      "^vsnvs$":
        type: object
        $ref: regulator.yaml#
        description:
          Properties for single VSNVS regulator.

        properties:
          regulator-name:
            pattern: "^vsnvs$"
            description:
              should be "vsnvs"

        unevaluatedProperties: false

    additionalProperties: false

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |
    i2c1 {
        #address-cells = <1>;
        #size-cells = <0>;

        pmic@8 {
            compatible = "nxp,pf8x00";
            reg = <0x08>;

            regulators {
                reg_ldo1: ldo1 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <5000000>;
                    regulator-min-microvolt = <1500000>;
                };

                reg_ldo2: ldo2 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <5000000>;
                    regulator-min-microvolt = <1500000>;
                };

                reg_ldo3: ldo3 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <5000000>;
                    regulator-min-microvolt = <1500000>;
                };

                reg_ldo4: ldo4 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <5000000>;
                    regulator-min-microvolt = <1500000>;
                };

                reg_buck1: buck1 {
                    nxp,ilim-ma = <4500>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck2: buck2 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck3: buck3 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck4: buck4 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck5: buck5 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck6: buck6 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <1800000>;
                    regulator-min-microvolt =  <400000>;
                };

                reg_buck7: buck7 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <3300000>;
                    regulator-min-microvolt = <3300000>;
                };

                reg_vsnvs: vsnvs {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-max-microvolt = <3300000>;
                    regulator-min-microvolt = <1800000>;
                };
            };
        };
    };
Loading