Commit f6c42489 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull regulator updates from Mark Brown:
 "There's a bunch of new drivers here, plus a lot of hardening for the
  supply resolution code which allow us to support systems where we have
  two PMICs each of which has regulators supplied by the other. This did
  work a long time ago but got broken as part of improved integration
  with the device model, it's fairly rare so nobody noticed.

   - Improvements for supply handling from André Draszik to allow
     systems with two PMICs with supply/consumer relationships in both
     directions to instantiate.

   - New drivers for Maxim MAX776750, Realtek RT8902, Samsung S2MPG11,
     Texas Instuments TPS65185.

  This have also pulls in some MFD updates which are build dependencies
  for the Samsung S2MPG11 support"

* tag 'regulator-v6.20' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (42 commits)
  regulator: s2mps11: more descriptive gpio consumer name
  regulator: s2mps11: add S2MPG11 regulator
  regulator: s2mps11: refactor S2MPG10 regulator macros for S2MPG11 reuse
  regulator: s2mps11: refactor S2MPG10 ::set_voltage_time() for S2MPG11 reuse
  regulator: s2mps11: add S2MPG10 regulator
  regulator: s2mps11: refactor handling of external rail control
  regulator: s2mps11: update node parsing (allow -supply properties)
  regulator: s2mps11: place constants on right side of comparison tests
  regulator: s2mps11: use dev_err_probe() where appropriate
  regulator: s2mps11: drop two needless variable initialisations
  regulator: add REGULATOR_LINEAR_VRANGE macro
  regulator: dt-bindings: add s2mpg11-pmic regulators
  regulator: dt-bindings: add s2mpg10-pmic regulators
  dt-bindings: firmware: google,gs101-acpm-ipc: convert regulators to lowercase
  mfd: sec: Add support for S2MPG11 PMIC via ACPM
  mfd: sec: s2mpg10: Reorder regulators for better probe performance
  dt-bindings: mfd: Add samsung,s2mpg11-pmic
  dt-bindings: mfd: samsung,s2mpg10-pmic: Link to its regulators
  dt-bindings: mfd: samsung,s2mps11: Split s2mpg10-pmic into separate file
  mfd: sec: Drop now unused struct sec_pmic_dev::irq_data
  ...
parents d5cbd9f3 914809c6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ examples:
            interrupts-extended = <&gpa0 6 IRQ_TYPE_LEVEL_LOW>;

            regulators {
                LDO1 {
                ldo1m {
                    regulator-name = "vdd_ldo1";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
@@ -84,7 +84,7 @@ examples:

                // ...

                BUCK1 {
                buck8m {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <450000>;
                    regulator-max-microvolt = <1300000>;
+120 −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/mfd/samsung,s2mpg10-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPG10 Power Management IC

maintainers:
  - André Draszik <andre.draszik@linaro.org>

description: |
  This is part of the device tree bindings for the S2MPG10 Power Management IC
  (PMIC).

  The Samsung S2MPG10 is a Power Management IC for mobile applications with buck
  converters, various LDOs, power meters, RTC, clock outputs, and additional
  GPIO interfaces and is typically complemented by S2MPG10 PMIC in a main/sub
  configuration as the main PMIC.

properties:
  compatible:
    const: samsung,s2mpg10-pmic

  clocks:
    $ref: /schemas/clock/samsung,s2mps11.yaml
    description:
      Child node describing clock provider.

  interrupts:
    maxItems: 1

  regulators:
    type: object
    $ref: /schemas/regulator/samsung,s2mpg10-regulator.yaml
    description:
      List of child nodes that specify the regulators.

  system-power-controller: true

  wakeup-source: true

patternProperties:
  "^vinb([1-9]|10)m-supply$":
    description:
      Phandle to the power supply for each buck rail of this PMIC. There is a
      1:1 mapping of supply to rail, e.g. vinb1m-supply supplies buck1m.

  "^vinl([1-9]|1[0-5])m-supply$":
    description: |
      Phandle to the power supply for one or multiple LDO rails of this PMIC.
      The mapping of supply to rail(s) is as follows:
        vinl1m - ldo13m
        vinl2m - ldo15m
        vinl3m - ldo1m, ldo5m, ldo7m
        vinl4m - ldo3m, ldo8m
        vinl5m - ldo16m
        vinl6m - ldo17m
        vinl7m - ldo6m, ldo11m, ldo24m, ldo28m
        vinl8m - ldo12m
        vinl9m - ldo2m, ldo4m
        vinl10m - ldo9m, ldo14m, ldo18m, 19m, ldo20m, ldo25m
        vinl11m - ldo23m, ldo31m
        vinl12m - ldo29m
        vinl13m - ldo30m
        vinl14m - ldo21m
        vinl15m - ldo10m, ldo22m, ldo26m, ldo27m

required:
  - compatible
  - interrupts
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/regulator/samsung,s2mpg10-regulator.h>

    pmic {
        compatible = "samsung,s2mpg10-pmic";
        interrupts-extended = <&gpa0 6 IRQ_TYPE_LEVEL_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pmic_int>;
        system-power-controller;
        wakeup-source;

        vinl3m-supply = <&buck8m>;

        clocks {
            compatible = "samsung,s2mpg10-clk";
            #clock-cells = <1>;
            clock-output-names = "rtc32k_ap", "peri32k1", "peri32k2";
        };

        regulators {
            buck8m {
                regulator-name = "vdd_mif";
                regulator-min-microvolt = <450000>;
                regulator-max-microvolt = <1300000>;
                regulator-ramp-delay = <6250>;
            };

            ldo1m {
                regulator-name = "vdd_ldo1";
                regulator-min-microvolt = <700000>;
                regulator-max-microvolt = <1300000>;
            };

            ldo20m {
                regulator-name = "vdd_dmics";
                regulator-min-microvolt = <700000>;
                regulator-max-microvolt = <1300000>;
                regulator-always-on;
                samsung,ext-control = <S2MPG10_EXTCTRL_LDO20M_EN2>;
            };
        };
    };
+88 −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/mfd/samsung,s2mpg11-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPG11 Power Management IC

maintainers:
  - André Draszik <andre.draszik@linaro.org>

description: |
  This is part of the device tree bindings for the S2MPG11 Power Management IC
  (PMIC).

  The Samsung S2MPG11 is a Power Management IC for mobile applications with buck
  converters, various LDOs, power meters, NTC thermistor inputs, and additional
  GPIO interfaces and typically complements an S2MPG10 PMIC in a main/sub
  configuration as the sub-PMIC.

properties:
  compatible:
    const: samsung,s2mpg11-pmic

  interrupts:
    maxItems: 1

  regulators:
    type: object
    $ref: /schemas/regulator/samsung,s2mpg11-regulator.yaml
    description:
      List of child nodes that specify the regulators.

  wakeup-source: true

patternProperties:
  "^vinb(([1-9]|10)s|[abd])-supply$":
    description:
      Phandle to the power supply for each buck rail of this PMIC. There is a
      1:1 mapping of numbered supply to rail, e.g. vinb1s-supply supplies
      buck1s. The remaining mapping is as follows
        vinba - bucka
        vinbb - buck boost
        vinbd - buckd

  "^vinl[1-6]s-supply$":
    description: |
      Phandle to the power supply for one or multiple LDO rails of this PMIC.
      The mapping of supply to rail(s) is as follows
        vinl1s - ldo1s, ldo2s
        vinl2s - ldo8s, ldo9s
        vinl3s - ldo3s, ldo5s, ldo7s, ldo15s
        vinl4s - ldo10s, ldo11s, ldo12s, ldo14s
        vinl5s - ldo4s, ldo6s
        vinl6s - ldo13s

required:
  - compatible
  - interrupts
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/regulator/samsung,s2mpg10-regulator.h>

    pmic {
        compatible = "samsung,s2mpg11-pmic";
        interrupts-extended = <&gpa0 7 IRQ_TYPE_LEVEL_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&pmic_int>;
        wakeup-source;

        vinl1s-supply = <&buck8m>;
        vinl2s-supply = <&buck6s>;

        regulators {
            buckd {
                regulator-name = "vcc_ufs";
                regulator-ramp-delay = <6250>;
                enable-gpios = <&gpp0 1 GPIO_ACTIVE_HIGH>;
                samsung,ext-control = <S2MPG11_EXTCTRL_UFS_EN>;
            };
        };
    };
+1 −28
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ description: |
properties:
  compatible:
    enum:
      - samsung,s2mpg10-pmic
      - samsung,s2mps11-pmic
      - samsung,s2mps13-pmic
      - samsung,s2mps14-pmic
@@ -59,42 +58,16 @@ properties:
      reset (setting buck voltages to default values).
    type: boolean

  system-power-controller: true

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mpg10-pmic
    then:
      properties:
        reg: false
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

      # oneOf is required, because dtschema's fixups.py doesn't handle this
      # nesting here. Its special treatment to allow either interrupt property
      # when only one is specified in the binding works at the top level only.
      oneOf:
        - required: [interrupts]
        - required: [interrupts-extended]

    else:
      properties:
        system-power-controller: false

      required:
        - reg

  - if:
      properties:
        compatible:
+184 −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/adi,max77675.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Maxim MAX77675 PMIC Regulator

maintainers:
  - Joan Na <joan.na@analog.com>

description:
  The MAX77675 is a Power Management IC providing four switching buck
  regulators (SBB0–SBB3) accessible via I2C. It supports configuration
  of output voltages and enable controls for each regulator.

allOf:
  - $ref: /schemas/input/input.yaml
  - $ref: /schemas/pinctrl/pincfg-node.yaml

properties:
  compatible:
    const: adi,max77675

  reg:
    maxItems: 1

  reset-time-sec:
    description: Manual reset time in seconds
    enum: [4, 8, 12, 16]
    default: 4

  bias-disable:
    type: boolean
    description: Disable internal pull-up for EN pin

  input-debounce:
    description: Debounce time for the enable pin, in microseconds
    items:
      - enum: [100, 30000]
    default: 100

  adi,en-mode:
    description: |
      Enable mode configuration.
      The debounce time set by 'input-debounce' applies to
      both push-button and slide-switch modes.
      "push-button"  - A long press triggers power-on or power-down
      "slide-switch" - Low : powers on, High : powers down
      "logic"        - Low : powers on, High : powers down (no debounce time)
    $ref: /schemas/types.yaml#/definitions/string
    enum: [push-button, slide-switch, logic]
    default: slide-switch

  adi,voltage-change-latency-us:
    description:
      Specifies the delay (in microseconds) between an output voltage change
      request and the start of the SBB voltage ramp.
    enum: [10, 100]
    default: 100

  adi,drv-sbb-strength:
    description: |
      SIMO Buck-Boost Drive Strength Trim.
      Controls the drive strength of the SIMO regulator's power MOSFETs.
      This setting affects switching speed, impacting power efficiency and EMI.
      "max"  – Maximum drive strength (~0.6 ns transition time)
      "high" – High drive strength (~1.2 ns transition time)
      "low"  – Low drive strength (~1.8 ns transition time)
      "min"  – Minimum drive strength (~8 ns transition time)
    $ref: /schemas/types.yaml#/definitions/string
    enum: [max, high, low, min]
    default: max

  adi,dvs-slew-rate-mv-per-us:
    description:
      Dynamic rising slew rate for output voltage transitions, in mV/μs.
      This setting is only used when 'adi,fixed-slew-rate' is not present.
    enum: [5, 10]
    default: 5

  adi,bias-low-power-request:
    type: boolean
    description: Request low-power bias mode

  adi,simo-ldo-always-on:
    type: boolean
    description: Set internal LDO to always supply 1.8V

  regulators:
    type: object
    description: Regulator child nodes
    patternProperties:
      "^sbb[0-3]$":
        type: object
        $ref: regulator.yaml#
        properties:
          adi,fps-slot:
            description: |
              FPS (Flexible Power Sequencer) slot selection.
              The Flexible Power Sequencer allows resources to power up under
              hardware or software control. Additionally, each resource can
              power up independently or among a group of other regulators with
              adjustable power-up and power-down slots.
              "slot0"   - Assign to FPS Slot 0
              "slot1"   - Assign to FPS Slot 1
              "slot2"   - Assign to FPS Slot 2
              "slot3"   - Assign to FPS Slot 3
              "default" - Use the default FPS slot value stored in register
            $ref: /schemas/types.yaml#/definitions/string
            enum: [slot0, slot1, slot2, slot3, default]
            default: default

          adi,fixed-slew-rate:
            type: boolean
            description:
              When this property is present, the device uses a constant 2 mV/μs
              slew rate and ignores any dynamic slew rate configuration.
              When absent, the device uses the dynamic slew rate specified
              by 'adi,dvs-slew-rate-mv-per-us'

        unevaluatedProperties: false

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

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

      max77675: pmic@44 {
        compatible = "adi,max77675";
        reg = <0x44>;

        reset-time-sec = <4>;
        input-debounce = <100>;

        adi,en-mode = "slide-switch";
        adi,voltage-change-latency-us = <100>;
        adi,drv-sbb-strength = "max";
        adi,dvs-slew-rate-mv-per-us = <5>;

        regulators {
          sbb0: sbb0 {
            regulator-name = "sbb0";
            regulator-min-microvolt = <500000>;
            regulator-max-microvolt = <5500000>;
            adi,fps-slot = "default";
            adi,fixed-slew-rate;
          };

          sbb1: sbb1 {
            regulator-name = "sbb1";
            regulator-min-microvolt = <500000>;
            regulator-max-microvolt = <5500000>;
            adi,fps-slot = "default";
            adi,fixed-slew-rate;
          };

          sbb2: sbb2 {
            regulator-name = "sbb2";
            regulator-min-microvolt = <500000>;
            regulator-max-microvolt = <5500000>;
            adi,fps-slot = "default";
            adi,fixed-slew-rate;
          };

          sbb3: sbb3 {
            regulator-name = "sbb3";
            regulator-min-microvolt = <500000>;
            regulator-max-microvolt = <5500000>;
            adi,fps-slot = "default";
            adi,fixed-slew-rate;
          };
        };
      };
    };
Loading