code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rockchip,rk817.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: RK817 Power Management Integrated Circuit

maintainers:
  - Chris Zhong <zyw@rock-chips.com>
  - Zhang Qing <zhangqing@rock-chips.com>

description: |
  Rockchip RK817 series PMIC. This device consists of an i2c controlled MFD
  that includes regulators, an RTC, a power button, an audio codec, and a
  battery charger manager.

properties:
  compatible:
    enum:
      - rockchip,rk817

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  '#clock-cells':
    description:
      See <dt-bindings/clock/rockchip,rk808.h> for clock IDs.
    minimum: 0
    maximum: 1

  clock-output-names:
    description:
      From common clock binding to override the default output clock name.

  rockchip,system-power-controller:
    type: boolean
    description:
      Telling whether or not this PMIC is controlling the system power.

  wakeup-source:
    type: boolean
    description:
      Device can be used as a wakeup source.

  vcc1-supply:
    description:
      The input supply for DCDC_REG1.

  vcc2-supply:
    description:
      The input supply for DCDC_REG2.

  vcc3-supply:
    description:
      The input supply for DCDC_REG3.

  vcc4-supply:
    description:
      The input supply for DCDC_REG4.

  vcc5-supply:
    description:
      The input supply for LDO_REG1, LDO_REG2, and LDO_REG3.

  vcc6-supply:
    description:
      The input supply for LDO_REG4, LDO_REG5, and LDO_REG6.

  vcc7-supply:
    description:
      The input supply for LDO_REG7, LDO_REG8, and LDO_REG9.

  vcc8-supply:
    description:
      The input supply for BOOST.

  vcc9-supply:
    description:
      The input supply for OTG_SWITCH.

  regulators:
    type: object
    patternProperties:
      "^(LDO_REG[1-9]|DCDC_REG[1-4]|BOOST|OTG_SWITCH)$":
        type: object
        unevaluatedProperties: false
        $ref: ../regulator/regulator.yaml#
    unevaluatedProperties: false

  clocks:
    description:
      The input clock for the audio codec.

  clock-names:
    description:
      The clock name for the codec clock.
    items:
      - const: mclk

  '#sound-dai-cells':
    description:
      Needed for the interpretation of sound dais.
    const: 0

  codec:
    description: |
      The child node for the codec to hold additional properties. If no
      additional properties are required for the codec, this node can be
      omitted.
    type: object
    additionalProperties: false
    properties:
      rockchip,mic-in-differential:
        type: boolean
        description:
          Describes if the microphone uses differential mode.

  charger:
    description: |
      The child node for the charger to hold additional properties. If a
      battery is not in use, this node can be omitted.
    type: object
    $ref: /schemas/power/supply/power-supply.yaml

    properties:
      monitored-battery:
        description: |
          A phandle to a monitored battery node that contains a valid
          value for:
          charge-full-design-microamp-hours,
          charge-term-current-microamp,
          constant-charge-current-max-microamp,
          constant-charge-voltage-max-microvolt,
          voltage-max-design-microvolt,
          voltage-min-design-microvolt,
          and a valid ocv-capacity table.

      rockchip,resistor-sense-micro-ohms:
        description: |
          Value in microohms of the battery sense resistor. This value is
          used by the driver to set the correct divisor value to translate
          ADC readings into the proper units of measure.
        enum: [10000, 20000]

      rockchip,sleep-enter-current-microamp:
        description: |
          Value in microamps of the sleep enter current for the charger.
          Value is used by the driver to calibrate the relax threshold.

      rockchip,sleep-filter-current-microamp:
        description:
          Value in microamps of the sleep filter current for the charger.
          Value is used by the driver to derive the sleep sample current.

    required:
      - monitored-battery
      - rockchip,resistor-sense-micro-ohms
      - rockchip,sleep-enter-current-microamp
      - rockchip,sleep-filter-current-microamp

    additionalProperties: false

allOf:
  - if:
      properties:
        '#clock-cells':
          const: 0

    then:
      properties:
        clock-output-names:
          maxItems: 1

    else:
      properties:
        clock-output-names:
          maxItems: 2

required:
  - compatible
  - reg
  - interrupts
  - "#clock-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/px30-cru.h>
    #include <dt-bindings/pinctrl/rockchip.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        rk817: pmic@20 {
            compatible = "rockchip,rk817";
            reg = <0x20>;
            interrupt-parent = <&gpio0>;
            interrupts = <RK_PB2 IRQ_TYPE_LEVEL_LOW>;
            clock-output-names = "rk808-clkout1", "xin32k";
            clock-names = "mclk";
            clocks = <&cru SCLK_I2S1_OUT>;
            pinctrl-names = "default";
            pinctrl-0 = <&pmic_int>, <&i2s1_2ch_mclk>;
            wakeup-source;
            #clock-cells = <1>;
            #sound-dai-cells = <0>;

            vcc1-supply = <&vccsys>;
            vcc2-supply = <&vccsys>;
            vcc3-supply = <&vccsys>;
            vcc4-supply = <&vccsys>;
            vcc5-supply = <&vccsys>;
            vcc6-supply = <&vccsys>;
            vcc7-supply = <&vccsys>;

            regulators {
                vdd_logic: DCDC_REG1 {
                    regulator-name = "vdd_logic";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1150000>;
                    regulator-ramp-delay = <6001>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <950000>;
                    };
                };

                vdd_arm: DCDC_REG2 {
                    regulator-name = "vdd_arm";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-ramp-delay = <6001>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <950000>;
                    };
                };

                vcc_ddr: DCDC_REG3 {
                    regulator-name = "vcc_ddr";
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                vcc_3v3: DCDC_REG4 {
                    regulator-name = "vcc_3v3";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vcc_1v8: LDO_REG2 {
                    regulator-name = "vcc_1v8";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1800000>;
                    };
                };

                vdd_1v0: LDO_REG3 {
                    regulator-name = "vdd_1v0";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1000000>;
                    };
                };

                vcc3v3_pmu: LDO_REG4 {
                    regulator-name = "vcc3v3_pmu";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vccio_sd: LDO_REG5 {
                    regulator-name = "vccio_sd";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vcc_sd: LDO_REG6 {
                    regulator-name = "vcc_sd";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vcc_bl: LDO_REG7 {
                    regulator-name = "vcc_bl";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vcc_lcd: LDO_REG8 {
                    regulator-name = "vcc_lcd";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <2800000>;
                    };
                };

                vcc_cam: LDO_REG9 {
                    regulator-name = "vcc_cam";
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3000000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <3000000>;
                    };
                };
            };

            rk817_charger: charger {
                monitored-battery = <&battery>;
                rockchip,resistor-sense-micro-ohms = <10000>;
                rockchip,sleep-enter-current-microamp = <300000>;
                rockchip,sleep-filter-current-microamp = <100000>;
            };

            rk817_codec: codec {
                rockchip,mic-in-differential;
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rockchip,rk818.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: RK818 Power Management Integrated Circuit

maintainers:
  - Chris Zhong <zyw@rock-chips.com>
  - Zhang Qing <zhangqing@rock-chips.com>

description: |
  Rockchip RK818 series PMIC. This device consists of an i2c controlled MFD
  that includes regulators, an RTC, and a power button.

properties:
  compatible:
    enum:
      - rockchip,rk818

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  '#clock-cells':
    description: |
      See <dt-bindings/clock/rockchip,rk808.h> for clock IDs.
    const: 1

  clock-output-names:
    description:
      From common clock binding to override the default output clock name.
    maxItems: 2

  rockchip,system-power-controller:
    type: boolean
    description:
      Telling whether or not this PMIC is controlling the system power.

  wakeup-source:
    type: boolean
    description:
      Device can be used as a wakeup source.

  vcc1-supply:
    description:
      The input supply for DCDC_REG1.

  vcc2-supply:
    description:
      The input supply for DCDC_REG2.

  vcc3-supply:
    description:
      The input supply for DCDC_REG3.

  vcc4-supply:
    description:
      The input supply for DCDC_REG4.

  boost-supply:
    description:
      The input supply for DCDC_BOOST

  vcc6-supply:
    description:
      The input supply for LDO_REG1 and LDO_REG2.

  vcc7-supply:
    description:
      The input supply for LDO_REG3, LDO_REG5, and LDO_REG7.

  vcc8-supply:
    description:
      The input supply for LDO_REG4, LDO_REG6, and LDO_REG8.

  vcc9-supply:
    description:
      The input supply for LDO_REG9 and SWITCH_REG.

  vddio-supply:
    description:
      The input supply for digital IO.

  h_5v-supply:
    description:
      The input supply for HDMI_SWITCH.

  usb-supply:
    description:
      The input supply for OTG_SWITCH.

  regulators:
    type: object
    patternProperties:
      "^(DCDC_REG[1-4]|DCDC_BOOST|LDO_REG[1-9]|SWITCH_REG|HDMI_SWITCH|OTG_SWITCH)$":
        type: object
        $ref: ../regulator/regulator.yaml#
    unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - "#clock-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/px30-cru.h>
    #include <dt-bindings/pinctrl/rockchip.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        rk818: pmic@1c {
            compatible = "rockchip,rk818";
            reg = <0x1c>;
            interrupt-parent = <&gpio0>;
            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&pmic_int>;
            rockchip,system-power-controller;
            wakeup-source;
            #clock-cells = <1>;

            vcc1-supply = <&vdd_sys>;
            vcc2-supply = <&vdd_sys>;
            vcc3-supply = <&vdd_sys>;
            vcc4-supply = <&vdd_sys>;
            boost-supply = <&vdd_in_otg_out>;
            vcc6-supply = <&vdd_sys>;
            vcc7-supply = <&vdd_misc_1v8>;
            vcc8-supply = <&vdd_misc_1v8>;
            vcc9-supply = <&vdd_3v3_io>;
            vddio-supply = <&vdd_3v3_io>;

            regulators {
                vdd_log: DCDC_REG1 {
                    regulator-name = "vdd_log";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                vdd_gpu: DCDC_REG2 {
                    regulator-name = "vdd_gpu";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1250000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1000000>;
                    };
                };

                vcc_ddr: DCDC_REG3 {
                    regulator-name = "vcc_ddr";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                vdd_3v3_io: DCDC_REG4 {
                    regulator-name = "vdd_3v3_io";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vdd_sys: DCDC_BOOST {
                    regulator-name = "vdd_sys";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <5000000>;
                    regulator-max-microvolt = <5000000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <5000000>;
                    };
                };

                vdd_sd: SWITCH_REG {
                    regulator-name = "vdd_sd";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                vdd_eth_2v5: LDO_REG2 {
                    regulator-name = "vdd_eth_2v5";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <2500000>;
                    regulator-max-microvolt = <2500000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <2500000>;
                    };
                };

                vdd_1v0: LDO_REG3 {
                    regulator-name = "vdd_1v0";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1000000>;
                    };
                };

                vdd_1v8_lcd_ldo: LDO_REG4 {
                    regulator-name = "vdd_1v8_lcd_ldo";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1800000>;
                    };
                };

                vdd_1v0_lcd: LDO_REG6 {
                    regulator-name = "vdd_1v0_lcd";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <1000000>;
                    };
                };

                vdd_1v8_ldo: LDO_REG7 {
                    regulator-name = "vdd_1v8_ldo";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <1800000>;
                    };
                };

                vdd_io_sd: LDO_REG9 {
                    regulator-name = "vdd_io_sd";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };
            };
        };
    };

repo_name: angery/linux


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd71815-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD71815 Power Management Integrated Circuit bindings

maintainers:
  - Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>

description: |
  BD71815AGW is a single-chip power management ICs for battery-powered
  portable devices. It integrates 5 buck converters, 8 LDOs, a boost driver
  for LED and a 500 mA single-cell linear charger. Also included is a Coulomb
  counter, a real-time clock (RTC), and a 32.768 kHz clock gate and two GPOs.

properties:
  compatible:
    const: rohm,bd71815

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  gpio-controller: true

  "#gpio-cells":
    const: 2
    description: |
      The first cell is the pin number and the second cell is used to specify
      flags. See ../gpio/gpio.txt for more information.

  clocks:
    maxItems: 1

  "#clock-cells":
    const: 0

  clock-output-names:
    const: bd71815-32k-out

  rohm,clkout-open-drain:
    description: clk32kout mode. Set to 1 for "open-drain" or 0 for "cmos".
    $ref: "/schemas/types.yaml#/definitions/uint32"
    minimum: 0
    maximum: 1

  rohm,charger-sense-resistor-ohms:
    minimum: 10000000
    maximum: 50000000
    description: |
      BD71827 and BD71828 have SAR ADC for measuring charging currents.
      External sense resistor (RSENSE in data sheet) should be used. If
      something other but 30MOhm resistor is used the resistance value
      should be given here in Ohms.
    default: 30000000

  regulators:
    $ref: ../regulator/rohm,bd71815-regulator.yaml
    description:
      List of child nodes that specify the regulators.

  gpio-reserved-ranges:
    description: |
      Usage of BD71828 GPIO pins can be changed via OTP. This property can be
      used to mark the pins which should not be configured for GPIO. Please see
      the ../gpio/gpio.txt for more information.

  rohm,enable-hidden-gpo:
    description: |
      The BD71815 has undocumented GPO at pin E5. Pin is marked as GND at the
      data-sheet as its location in the middle of GND pins makes it hard to
      use on PCB. If your board has managed to use this pin you can enable the
      second GPO by defining this property. Dont enable this if you are unsure
      about how the E5 pin is connected on your board.
    type: boolean

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - "#clock-cells"
  - regulators
  - gpio-controller
  - "#gpio-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/leds/common.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@4b {
            compatible = "rohm,bd71815";
            reg = <0x4b>;

            interrupt-parent = <&gpio1>;
            interrupts = <29 IRQ_TYPE_LEVEL_LOW>;

            clocks = <&osc 0>;
            #clock-cells = <0>;
            clock-output-names = "bd71815-32k-out";

            gpio-controller;
            #gpio-cells = <2>;

            rohm,charger-sense-resistor-ohms = <10000000>;

            regulators {
                buck1: buck1 {
                    regulator-name = "buck1";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <1150000>;
                    rohm,dvs-suspend-voltage = <950000>;
                };
                buck2: buck2 {
                    regulator-name = "buck2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <1150000>;
                    rohm,dvs-suspend-voltage = <950000>;
                };
                buck3: buck3 {
                    regulator-name = "buck3";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <2700000>;
                    regulator-always-on;
                };
                buck4: buck4 {
                    regulator-name = "buck4";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1850000>;
                    regulator-always-on;
                };
                buck5: buck5 {
                    regulator-name = "buck5";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo1: ldo1 {
                    regulator-name = "ldo1";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo2: ldo2 {
                    regulator-name = "ldo2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo3: ldo3 {
                    regulator-name = "ldo3";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo4: ldo4 {
                    regulator-name = "ldo4";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo5: ldo5 {
                    regulator-name = "ldo5";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-always-on;
                };
                ldo6: ldodvref {
                    regulator-name = "ldodvref";
                    regulator-always-on;
                };
                ldo7: ldolpsr {
                    regulator-name = "ldolpsr";
                    regulator-always-on;
                };

                boost: wled {
                    regulator-name = "wled";
                    regulator-min-microamp = <10>;
                    regulator-max-microamp = <25000>;
                };
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd71828-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD71828 Power Management Integrated Circuit bindings

maintainers:
  - Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>

description: |
  BD71828GW is a single-chip power management IC for battery-powered portable
  devices. The IC integrates 7 buck converters, 7 LDOs, and a 1500 mA
  single-cell linear charger. Also included is a Coulomb counter, a real-time
  clock (RTC), and a 32.768 kHz clock gate.

properties:
  compatible:
    const: rohm,bd71828

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  gpio-controller: true

  "#gpio-cells":
    const: 2
    description: |
      The first cell is the pin number and the second cell is used to specify
      flags. See ../gpio/gpio.txt for more information.

  clocks:
    maxItems: 1

  "#clock-cells":
    const: 0

  clock-output-names:
    const: bd71828-32k-out

  rohm,clkout-open-drain:
    description: clk32kout mode. Set to 1 for "open-drain" or 0 for "cmos".
    $ref: "/schemas/types.yaml#/definitions/uint32"
    minimum: 0
    maximum: 1

  rohm,charger-sense-resistor-ohms:
    minimum: 10000000
    maximum: 50000000
    description: |
      BD71827 and BD71828 have SAR ADC for measuring charging currents.
      External sense resistor (RSENSE in data sheet) should be used. If some
      other but 30MOhm resistor is used the resistance value should be given
      here in Ohms.

  regulators:
    $ref: ../regulator/rohm,bd71828-regulator.yaml
    description:
      List of child nodes that specify the regulators.

  leds:
    $ref: ../leds/rohm,bd71828-leds.yaml

  gpio-reserved-ranges:
    description: |
      Usage of BD71828 GPIO pins can be changed via OTP. This property can be
      used to mark the pins which should not be configured for GPIO. Please see
      the ../gpio/gpio.txt for more information.

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - "#clock-cells"
  - regulators
  - gpio-controller
  - "#gpio-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/leds/common.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@4b {
            compatible = "rohm,bd71828";
            reg = <0x4b>;

            interrupt-parent = <&gpio1>;
            interrupts = <29 IRQ_TYPE_LEVEL_LOW>;

            clocks = <&osc 0>;
            #clock-cells = <0>;
            clock-output-names = "bd71828-32k-out";

            gpio-controller;
            #gpio-cells = <2>;
            gpio-reserved-ranges = <0 1>, <2 1>;

            rohm,charger-sense-resistor-ohms = <10000000>;

            regulators {
                buck1: BUCK1 {
                    regulator-name = "buck1";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck2: BUCK2 {
                    regulator-name = "buck2";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck3: BUCK3 {
                    regulator-name = "buck3";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <2000000>;
                };
                buck4: BUCK4 {
                    regulator-name = "buck4";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1800000>;
                };
                buck5: BUCK5 {
                    regulator-name = "buck5";
                    regulator-min-microvolt = <2500000>;
                    regulator-max-microvolt = <3300000>;
                };
                buck6: BUCK6 {
                    regulator-name = "buck6";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck7: BUCK7 {
                    regulator-name = "buck7";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                ldo1: LDO1 {
                    regulator-name = "ldo1";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo2: LDO2 {
                    regulator-name = "ldo2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo3: LDO3 {
                    regulator-name = "ldo3";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo4: LDO4 {
                    regulator-name = "ldo4";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo5: LDO5 {
                    regulator-name = "ldo5";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo6: LDO6 {
                    regulator-name = "ldo6";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                };
                ldo7_reg: LDO7 {
                    regulator-name = "ldo7";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
            };

            leds {
                compatible = "rohm,bd71828-leds";

                led-1 {
                    rohm,led-compatible = "bd71828-grnled";
                    function = LED_FUNCTION_INDICATOR;
                    color = <LED_COLOR_ID_GREEN>;
                };
                led-2 {
                    rohm,led-compatible = "bd71828-ambled";
                    function = LED_FUNCTION_CHARGING;
                    color = <LED_COLOR_ID_AMBER>;
                };
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd71837-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD71837 Power Management Integrated Circuit bindings

maintainers:
  - Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>

description: |
  BD71837MWV is programmable Power Management ICs for powering single-core,
  dual-core, and quad-core SoCs such as NXP-i.MX 8M. It is optimized for low
  BOM cost and compact solution footprint. BD71837MWV  integrates 8 Buck
  regulators and 7 LDOs.
  Datasheet for BD71837 is available at
  https://www.rohm.com/products/power-management/power-management-ic-for-system/industrial-consumer-applications/nxp-imx/bd71837amwv-product

properties:
  compatible:
    const: rohm,bd71837

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    const: osc

  "#clock-cells":
    const: 0

  clock-output-names:
    const: pmic_clk

# The BD718x7 supports two different HW states as reset target states. States
# are called as SNVS and READY. At READY state all the PMIC power outputs go
# down and OTP is reload. At the SNVS state all other logic and external
# devices apart from the SNVS power domain are shut off. Please refer to NXP
# i.MX8 documentation for further information regarding SNVS state. When a
# reset is done via SNVS state the PMIC OTP data is not reload. This causes
# power outputs that have been under SW control to stay down when reset has
# switched power state to SNVS. If reset is done via READY state the power
# outputs will be returned to HW control by OTP loading. Thus the reset
# target state is set to READY by default. If SNVS state is used the boot
# crucial regulators must have the regulator-always-on and regulator-boot-on
# properties set in regulator node.

  rohm,reset-snvs-powered:
    description: |
      Transfer PMIC to SNVS state at reset
    type: boolean

# Configure the "short press" and "long press" timers for the power button.
# Values are rounded to what hardware supports
# Short-press:
#   Shortest being 10ms, next 500ms and then multiple of 500ms up to 7,5s
# Long-press:
#   Shortest being 10ms, next 1000ms and then multiple of 1000ms up to 15s
# If these properties are not present the existing configuration (from
# bootloader or OTP) is not touched.

  rohm,short-press-ms:
    description:
      Short press duration in milliseconds
    enum:
      - 10
      - 500
      - 1000
      - 1500
      - 2000
      - 2500
      - 3000
      - 3500
      - 4000
      - 4500
      - 5000
      - 5500
      - 6000
      - 6500
      - 7000

  rohm,long-press-ms:
    description:
      Long press duration in milliseconds
    enum:
      - 10
      - 1000
      - 2000
      - 3000
      - 4000
      - 5000
      - 6000
      - 7000
      - 8000
      - 9000
      - 10000
      - 11000
      - 12000
      - 13000
      - 14000

  regulators:
    $ref: ../regulator/rohm,bd71837-regulator.yaml
    description:
      List of child nodes that specify the regulators.

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - "#clock-cells"
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/leds/common.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@4b {
            compatible = "rohm,bd71837";
            reg = <0x4b>;
            interrupt-parent = <&gpio1>;
            interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
            #clock-cells = <0>;
            clocks = <&osc 0>;
            rohm,reset-snvs-powered;
            rohm,short-press-ms = <10>;
            rohm,long-press-ms = <2000>;

            regulators {
                buck1: BUCK1 {
                    regulator-name = "buck1";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <900000>;
                    rohm,dvs-idle-voltage = <850000>;
                    rohm,dvs-suspend-voltage = <800000>;
                };
                buck2: BUCK2 {
                    regulator-name = "buck2";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <1000000>;
                    rohm,dvs-idle-voltage = <900000>;
                };
                buck3: BUCK3 {
                    regulator-name = "buck3";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    rohm,dvs-run-voltage = <1000000>;
                };
                buck4: BUCK4 {
                    regulator-name = "buck4";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    rohm,dvs-run-voltage = <1000000>;
                };
                buck5: BUCK5 {
                    regulator-name = "buck5";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-boot-on;
                };
                buck6: BUCK6 {
                    regulator-name = "buck6";
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                };
                buck7: BUCK7 {
                    regulator-name = "buck7";
                    regulator-min-microvolt = <1605000>;
                    regulator-max-microvolt = <1995000>;
                    regulator-boot-on;
                };
                buck8: BUCK8 {
                    regulator-name = "buck8";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1400000>;
                };

                ldo1: LDO1 {
                    regulator-name = "ldo1";
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                };
                ldo2: LDO2 {
                    regulator-name = "ldo2";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <900000>;
                    regulator-boot-on;
                };
                ldo3: LDO3 {
                    regulator-name = "ldo3";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo4: LDO4 {
                    regulator-name = "ldo4";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1800000>;
                };
                ldo5: LDO5 {
                    regulator-name = "ldo5";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo6: LDO6 {
                    regulator-name = "ldo6";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1800000>;
                };
                ldo7_reg: LDO7 {
                    regulator-name = "ldo7";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                };
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd71847-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD71847 and BD71850 Power Management Integrated Circuit bindings

maintainers:
  - Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>

description: |
  BD71847AMWV and BD71850MWV are programmable Power Management ICs for powering
  single-core,  dual-core, and quad-core SoCs such as NXP-i.MX 8M. It is
  optimized for low BOM cost and compact solution footprint. BD71847MWV and
  BD71850MWV integrate 6 Buck regulators and 6 LDOs.
  Datasheets are available at
  https://www.rohm.com/products/power-management/power-management-ic-for-system/industrial-consumer-applications/nxp-imx/bd71847amwv-product
  https://www.rohm.com/products/power-management/power-management-ic-for-system/industrial-consumer-applications/nxp-imx/bd71850mwv-product

properties:
  compatible:
    enum:
      - rohm,bd71847
      - rohm,bd71850

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  "#clock-cells":
    const: 0

  clock-output-names:
    maxItems: 1

# The BD71847 abd BD71850 support two different HW states as reset target
# states. States are called as SNVS and READY. At READY state all the PMIC
# power outputs go down and OTP is reload. At the SNVS state all other logic
# and external devices apart from the SNVS power domain are shut off. Please
# refer to NXP i.MX8 documentation for further information regarding SNVS
# state. When a reset is done via SNVS state the PMIC OTP data is not reload.
# This causes power outputs that have been under SW control to stay down when
# reset has switched power state to SNVS. If reset is done via READY state the
# power outputs will be returned to HW control by OTP loading. Thus the reset
# target state is set to READY by default. If SNVS state is used the boot
# crucial regulators must have the regulator-always-on and regulator-boot-on
# properties set in regulator node.

  rohm,reset-snvs-powered:
    description:
      Transfer PMIC to SNVS state at reset.
    type: boolean

# Configure the "short press" and "long press" timers for the power button.
# Values are rounded to what hardware supports
# Short-press:
#   Shortest being 10ms, next 500ms and then multiple of 500ms up to 7,5s
# Long-press:
#   Shortest being 10ms, next 1000ms and then multiple of 1000ms up to 15s
# If these properties are not present the existing # configuration (from
# bootloader or OTP) is not touched.

  rohm,short-press-ms:
    description:
      Short press duration in milliseconds
    enum:
      - 10
      - 500
      - 1000
      - 1500
      - 2000
      - 2500
      - 3000
      - 3500
      - 4000
      - 4500
      - 5000
      - 5500
      - 6000
      - 6500
      - 7000
      - 7500

  rohm,long-press-ms:
    description:
      Long press duration in milliseconds
    enum:
      - 10
      - 1000
      - 2000
      - 3000
      - 4000
      - 5000
      - 6000
      - 7000
      - 8000
      - 9000
      - 10000
      - 11000
      - 12000
      - 13000
      - 14000
      - 15000

  regulators:
    $ref: ../regulator/rohm,bd71847-regulator.yaml
    description:
      List of child nodes that specify the regulators.

required:
  - compatible
  - reg
  - interrupts
  - regulators

additionalProperties: false

dependencies:
  '#clock-cells': [clocks]
  clocks: ['#clock-cells']

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/leds/common.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@4b {
            compatible = "rohm,bd71847";
            reg = <0x4b>;
            interrupt-parent = <&gpio1>;
            interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
            #clock-cells = <0>;
            clocks = <&osc 0>;
            rohm,reset-snvs-powered;
            rohm,short-press-ms = <10>;
            rohm,long-press-ms = <2000>;

            regulators {
                buck1: BUCK1 {
                    regulator-name = "buck1";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <900000>;
                    rohm,dvs-idle-voltage = <850000>;
                    rohm,dvs-suspend-voltage = <800000>;
                };
                buck2: BUCK2 {
                    regulator-name = "buck2";
                    regulator-min-microvolt = <700000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1250>;
                    rohm,dvs-run-voltage = <1000000>;
                    rohm,dvs-idle-voltage = <900000>;
                };
                buck3: BUCK3 {
                    regulator-name = "buck3";
                    regulator-min-microvolt = <550000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-boot-on;
                };
                buck4: BUCK4 {
                    regulator-name = "buck4";
                    regulator-min-microvolt = <2600000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                };
                buck5: BUCK5 {
                    regulator-name = "buck5";
                    regulator-min-microvolt = <1605000>;
                    regulator-max-microvolt = <1995000>;
                    regulator-boot-on;
                };
                buck8: BUCK6 {
                    regulator-name = "buck6";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1400000>;
                };

                ldo1: LDO1 {
                    regulator-name = "ldo1";
                    regulator-min-microvolt = <1600000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                };
                ldo2: LDO2 {
                    regulator-name = "ldo2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <900000>;
                    regulator-boot-on;
                };
                ldo3: LDO3 {
                    regulator-name = "ldo3";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo4: LDO4 {
                    regulator-name = "ldo4";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1800000>;
                };
                ldo5: LDO5 {
                    regulator-name = "ldo5";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo6: LDO6 {
                    regulator-name = "ldo6";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1800000>;
                };
            };
        };
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd9571mwv.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD9571MWV/BD9574MWF Power Management Integrated Circuit (PMIC)

maintainers:
  - Marek Vasut <marek.vasut@gmail.com>

properties:
  compatible:
    enum:
      - rohm,bd9571mwv
      - rohm,bd9574mwf

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  '#interrupt-cells':
    const: 2

  gpio-controller: true

  '#gpio-cells':
    const: 2

  rohm,ddr-backup-power:
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0x0
    maximum: 0xf
    description: |
      Value to use for DDR-Backup Power (default 0).
      This is a bitmask that specifies which DDR power rails need to be kept
      powered when backup mode is entered, for system suspend:
        - bit 0: DDR0
        - bit 1: DDR1
        - bit 2: DDR0C
        - bit 3: DDR1C
      These bits match the KEEPON_DDR* bits in the documentation for the "BKUP
      Mode Cnt" register.

  rohm,rstbmode-level:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      The RSTB signal is configured for level mode, to accommodate a toggle
      power switch (the RSTBMODE pin is strapped low).

  rohm,rstbmode-pulse:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      The RSTB signal is configured for pulse mode, to accommodate a momentary
      power switch (the RSTBMODE pin is strapped high).

  regulators:
    type: object
    description:
      List of child nodes that specify the regulator initialization data.
      Child nodes must be named after their hardware counterparts.

    patternProperties:
      "^(vd09|vd18|vd25|vd33|dvfs)$":
        type: object
        $ref: ../regulator/regulator.yaml#

        properties:
          regulator-name:
            pattern: "^(vd09|vd18|vd25|vd33|dvfs)$"

        unevaluatedProperties: false

    additionalProperties: false

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - interrupt-controller
  - '#interrupt-cells'
  - gpio-controller
  - '#gpio-cells'

oneOf:
  - required:
      - rohm,rstbmode-level
  - required:
      - rohm,rstbmode-pulse

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

          pmic: pmic@30 {
                  compatible = "rohm,bd9571mwv";
                  reg = <0x30>;
                  interrupt-parent = <&gpio2>;
                  interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
                  interrupt-controller;
                  #interrupt-cells = <2>;
                  gpio-controller;
                  #gpio-cells = <2>;
                  rohm,ddr-backup-power = <0xf>;
                  rohm,rstbmode-pulse;

                  regulators {
                          dvfs: dvfs {
                                  regulator-name = "dvfs";
                                  regulator-min-microvolt = <750000>;
                                  regulator-max-microvolt = <1030000>;
                                  regulator-boot-on;
                                  regulator-always-on;
                          };
                  };
          };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd9576-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD9576MUF and BD9573MUF Power Management Integrated Circuit bindings

maintainers:
  - Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>

description: |
  BD9576MUF and BD9573MUF are power management ICs primarily intended for
  powering the R-Car series processors.
  The IC provides 6 power outputs with configurable sequencing and safety
  monitoring. A watchdog logic with slow ping/windowed modes is also included.

properties:
  compatible:
    enum:
      - rohm,bd9576
      - rohm,bd9573

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  rohm,vout1-en-low:
    description:
      BD9576 and BD9573 VOUT1 regulator enable state can be individually
      controlled by a GPIO. This is dictated by state of vout1-en pin during
      the PMIC startup. If vout1-en is LOW during PMIC startup then the VOUT1
      enable sate is controlled via this pin. Set this property if vout1-en
      is wired to be down at PMIC start-up.
    type: boolean

  rohm,vout1-en-gpios:
    description:
      GPIO specifier to specify the GPIO connected to vout1-en for vout1 ON/OFF
      state control.
    maxItems: 1

  rohm,ddr-sel-low:
    description:
      The BD9576 and BD9573 output voltage for DDR can be selected by setting
      the ddr-sel pin low or high. Set this property if ddr-sel is grounded.
    type: boolean

  rohm,watchdog-enable-gpios:
    description: The GPIO line used to enable the watchdog.
    maxItems: 1

  rohm,watchdog-ping-gpios:
    description: The GPIO line used to ping the watchdog.
    maxItems: 1

  rohm,hw-timeout-ms:
    maxItems: 2
    description:
      Watchog timeout in milliseconds. If single value is given it is
      the maximum timeout. Eg. if pinging watchdog is not done within this time
      limit the watchdog will be triggered. If two values are given watchdog
      is configured in "window mode". Then first value is limit for short-ping
      Eg. if watchdog is pinged sooner than that the watchdog will trigger.
      When two values is given the second value is the maximum timeout.
      # (HW) minimum for short timeout is 2ms, maximum 220 ms.
      # (HW) minimum for max timeout is 4ms, maximum 4416 ms.

  regulators:
    $ref: ../regulator/rohm,bd9576-regulator.yaml
    description:
      List of child nodes that specify the regulators.

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/leds/common.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@30 {
            compatible = "rohm,bd9576";
            reg = <0x30>;
            rohm,vout1-en-low;
            rohm,vout1-en-gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
            rohm,ddr-sel-low;
            rohm,watchdog-enable-gpios = <&gpio2 6 GPIO_ACTIVE_HIGH>;
            rohm,watchdog-ping-gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;
            rohm,hw-timeout-ms = <150>, <2300>;

            regulators {
                boost1: regulator-vd50 {
                    regulator-name = "VD50";
                };
                buck1: regulator-vd18 {
                    regulator-name = "VD18";
                };
                buck2: regulator-vdddr {
                    regulator-name = "VDDDR";
                };
                buck3: regulator-vd10 {
                    regulator-name = "VD10";
                };
                ldo: regulator-voutl1 {
                    regulator-name = "VOUTL1";
                };
                sw: regulator-vouts1 {
                    regulator-name = "VOUTS1";
                };
            };
        };
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/samsung,exynos5433-lpass.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung Exynos SoC Low Power Audio Subsystem (LPASS)

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>
  - Sylwester Nawrocki <s.nawrocki@samsung.com>

properties:
  compatible:
    const: samsung,exynos5433-lpass

  '#address-cells':
    const: 1

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: sfr0_ctrl

  power-domains:
    maxItems: 1

  ranges: true

  reg:
    minItems: 2
    maxItems: 2

  '#size-cells':
    const: 1

patternProperties:
  "^dma-controller@[0-9a-f]+$":
    $ref: /schemas/dma/arm,pl330.yaml

  "^i2s@[0-9a-f]+$":
    $ref: /schemas/sound/samsung-i2s.yaml

  "^serial@[0-9a-f]+$":
    $ref: /schemas/serial/samsung_uart.yaml

required:
  - compatible
  - '#address-cells'
  - clocks
  - clock-names
  - ranges
  - reg
  - '#size-cells'

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/exynos5433.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    audio-subsystem@11400000 {
        compatible = "samsung,exynos5433-lpass";
        reg = <0x11400000 0x100>, <0x11500000 0x08>;
        clocks = <&cmu_aud CLK_PCLK_SFR0_CTRL>;
        clock-names = "sfr0_ctrl";
        power-domains = <&pd_aud>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;

        dma-controller@11420000 {
            compatible = "arm,pl330", "arm,primecell";
            reg = <0x11420000 0x1000>;
            interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cmu_aud CLK_ACLK_DMAC>;
            clock-names = "apb_pclk";
            #dma-cells = <1>;
            dma-channels = <8>;
            dma-requests = <32>;
            power-domains = <&pd_aud>;
        };

        i2s@11440000 {
            compatible = "samsung,exynos7-i2s";
            reg = <0x11440000 0x100>;
            dmas = <&adma 0>, <&adma 2>;
            dma-names = "tx", "rx";
            interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
            #address-cells = <1>;
            #size-cells = <0>;
            clocks = <&cmu_aud CLK_PCLK_AUD_I2S>,
                     <&cmu_aud CLK_SCLK_AUD_I2S>,
                     <&cmu_aud CLK_SCLK_I2S_BCLK>;
            clock-names = "iis", "i2s_opclk0", "i2s_opclk1";
            #clock-cells = <1>;
            pinctrl-names = "default";
            pinctrl-0 = <&i2s0_bus>;
            power-domains = <&pd_aud>;
            #sound-dai-cells = <1>;
        };

        serial@11460000 {
            compatible = "samsung,exynos5433-uart";
            reg = <0x11460000 0x100>;
            interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cmu_aud CLK_PCLK_AUD_UART>,
                     <&cmu_aud CLK_SCLK_AUD_UART>;
            clock-names = "uart", "clk_uart_baud0";
            pinctrl-names = "default";
            pinctrl-0 = <&uart_aud_bus>;
            power-domains = <&pd_aud>;
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/samsung,s2mpa01.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPA01 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S2MPA01 is a Power Management IC which includes voltage
  and current regulators, RTC, clock outputs and other sub-blocks.

properties:
  compatible:
    const: samsung,s2mpa01-pmic

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    $ref: ../regulator/samsung,s2mpa01.yaml
    description:
      List of child nodes that specify the regulators.

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

        pmic@66 {
            compatible = "samsung,s2mpa01-pmic";
            reg = <0x66>;

            regulators {
                ldo1_reg: LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                };

                ldo2_reg: LDO2 {
                    regulator-name = "VDDQ_MMC2";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                    regulator-always-on;
                };

                // ...

                buck1_reg: BUCK1 {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                };

                buck2_reg: BUCK2 {
                    regulator-name = "vdd_arm";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-ramp-delay = <50000>;
                };

                // ...
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/samsung,s2mps11.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPS11/13/14/15 and S2MPU02 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S2MPS11/13/14/15 and S2MPU02 is a family of Power Management IC
  which include voltage and current regulators, RTC, clock outputs and other
  sub-blocks.

properties:
  compatible:
    enum:
      - samsung,s2mps11-pmic
      - samsung,s2mps13-pmic
      - samsung,s2mps14-pmic
      - samsung,s2mps15-pmic
      - samsung,s2mpu02-pmic

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

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    type: object
    description:
      List of child nodes that specify the regulators.

  samsung,s2mps11-acokb-ground:
    description: |
      Indicates that ACOKB pin of S2MPS11 PMIC is connected to the ground so
      the PMIC must manually set PWRHOLD bit in CTRL1 register to turn off the
      power. Usually the ACOKB is pulled up to VBATT so when PWRHOLD pin goes
      low, the rising ACOKB will trigger power off.
    type: boolean

  samsung,s2mps11-wrstbi-ground:
    description: |
      Indicates that WRSTBI pin of PMIC is pulled down. When the system is
      suspended it will always go down thus triggerring unwanted buck warm
      reset (setting buck voltages to default values).
    type: boolean

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps11-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps11.yaml
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps13-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps13.yaml
        samsung,s2mps11-acokb-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps14-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps14.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps15-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps15.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mpu02-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mpu02.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

        pmic@66 {
            compatible = "samsung,s2mps11-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx0>;
            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s2mps11_irq>;
            samsung,s2mps11-acokb-ground;
            wakeup-source;

            clocks {
                compatible = "samsung,s2mps11-clk";
                #clock-cells = <1>;
                clock-output-names = "s2mps11_ap", "s2mps11_cp", "s2mps11_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "vdd_ldo1";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;
                };

                LDO4 {
                    regulator-name = "vdd_adc";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ....

                BUCK1 {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                BUCK2 {
                    regulator-name = "vdd_arm";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-coupled-with = <&buck3_reg>;
                    regulator-coupled-max-spread = <300000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                BUCK3 {
                    regulator-name = "vdd_int";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1400000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-coupled-with = <&buck2_reg>;
                    regulator-coupled-max-spread = <300000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ...
            };
        };
    };

  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

        pmic@66 {
            compatible = "samsung,s2mps14-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx0>;
            interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
            wakeup-source;

            clocks {
                compatible = "samsung,s2mps14-clk";
                #clock-cells = <1>;
                clock-output-names = "s2mps14_ap", "unused", "s2mps14_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VLDO1_1.0V";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                // ...

                BUCK1 {
                    regulator-name = "VBUCK1_1.0V";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ...
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/samsung,s5m8767.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S5M8767 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S5M8767 is a Power Management IC which includes voltage
  and current regulators, RTC, clock outputs and other sub-blocks.

properties:
  compatible:
    const: samsung,s5m8767-pmic

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

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    $ref: ../regulator/samsung,s5m8767.yaml
    description:
      List of child nodes that specify the regulators.

  s5m8767,pmic-buck2-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck2 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck3-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck3 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck4-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck4 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck-ds-gpios:
    minItems: 3
    maxItems: 3
    description: |
      GPIO specifiers for three host gpio's used for selecting GPIO DVS lines.
      It is one-to-one mapped to dvs gpio lines.

  s5m8767,pmic-buck2-uses-gpio-dvs:
    type: boolean
    description: buck2 can be controlled by gpio dvs.

  s5m8767,pmic-buck3-uses-gpio-dvs:
    type: boolean
    description: buck3 can be controlled by gpio dvs.

  s5m8767,pmic-buck4-uses-gpio-dvs:
    type: boolean
    description: buck4 can be controlled by gpio dvs.

  s5m8767,pmic-buck-default-dvs-idx:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minimum: 0
    maximum: 7
    default: 0
    description: |
      Default voltage setting selected from the possible 8 options selectable
      by the dvs gpios. The value of this property should be between 0 and 7.
      If not specified or if out of range, the default value of this property
      is set to 0.

  s5m8767,pmic-buck-dvs-gpios:
    minItems: 3
    maxItems: 3
    description: |
      GPIO specifiers for three host gpio's used for dvs.

  vinb1-supply:
    description: Power supply for buck1
  vinb2-supply:
    description: Power supply for buck2
  vinb3-supply:
    description: Power supply for buck3
  vinb4-supply:
    description: Power supply for buck4
  vinb5-supply:
    description: Power supply for buck5
  vinb6-supply:
    description: Power supply for buck6
  vinb7-supply:
    description: Power supply for buck7
  vinb8-supply:
    description: Power supply for buck8
  vinb9-supply:
    description: Power supply for buck9

  vinl1-supply:
    description: Power supply for LDO3, LDO10, LDO26, LDO27
  vinl2-supply:
    description: Power supply for LDO13, LDO16, LDO25, LDO28
  vinl3-supply:
    description: Power supply for LDO11, LDO14
  vinl4-supply:
    description: Power supply for LDO4, LDO9
  vinl5-supply:
    description: Power supply for LDO12, LDO17, LDO19, LDO23
  vinl6-supply:
    description: Power supply for LDO18, LDO20, LDO21, LDO24
  vinl7-supply:
    description: Power supply for LDO5, LDO22
  vinl8-supply:
    description: Power supply for LDO1, LDO6, LDO7, LDO8, LDO15
  vinl9-supply:
    description: Power supply for LDO2

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators
  - s5m8767,pmic-buck-ds-gpios

dependencies:
  s5m8767,pmic-buck2-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck3-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck4-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck2-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck2-dvs-voltage' ]
  s5m8767,pmic-buck3-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck3-dvs-voltage' ]
  s5m8767,pmic-buck4-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck4-dvs-voltage' ]

additionalProperties: false

allOf:
  - if:
      required:
        - s5m8767,pmic-buck2-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck3-uses-gpio-dvs: false
        s5m8767,pmic-buck4-uses-gpio-dvs: false

  - if:
      required:
        - s5m8767,pmic-buck3-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck2-uses-gpio-dvs: false
        s5m8767,pmic-buck4-uses-gpio-dvs: false

  - if:
      required:
        - s5m8767,pmic-buck4-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck2-uses-gpio-dvs: false
        s5m8767,pmic-buck3-uses-gpio-dvs: false

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

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

        pmic@66 {
            compatible = "samsung,s5m8767-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx3>;
            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
            wakeup-source;

            s5m8767,pmic-buck-default-dvs-idx = <3>;
            s5m8767,pmic-buck2-uses-gpio-dvs;

            s5m8767,pmic-buck-dvs-gpios = <&gpd1 0 GPIO_ACTIVE_LOW>,
                                          <&gpd1 1 GPIO_ACTIVE_LOW>,
                                          <&gpd1 2 GPIO_ACTIVE_LOW>;

            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
                                         <&gpx2 5 GPIO_ACTIVE_LOW>;

            s5m8767,pmic-buck2-dvs-voltage = <1350000>, <1300000>,
                                             <1250000>, <1200000>,
                                             <1150000>, <1100000>,
                                             <1000000>, <950000>;

            s5m8767,pmic-buck3-dvs-voltage = <1100000>, <1100000>,
                                             <1100000>, <1100000>,
                                             <1000000>, <1000000>,
                                             <1000000>, <1000000>;

            s5m8767,pmic-buck4-dvs-voltage = <1200000>, <1200000>,
                                             <1200000>, <1200000>,
                                             <1200000>, <1200000>,
                                             <1200000>, <1200000>;

            clocks {
                compatible = "samsung,s5m8767-clk";
                #clock-cells = <1>;
                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...

                BUCK1 {
                    regulator-name = "VDD_MIF";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                BUCK2 {
                    regulator-name = "VDD_ARM";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...
            };
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

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

        pmic@66 {
            compatible = "samsung,s5m8767-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx3>;
            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
            wakeup-source;

            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
                                         <&gpx2 5 GPIO_ACTIVE_LOW>;

            clocks {
                compatible = "samsung,s5m8767-clk";
                #clock-cells = <1>;
                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...
            };
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/silergy,sy7636a.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: silergy sy7636a PMIC

maintainers:
  - Alistair Francis <alistair@alistair23.me>

properties:
  compatible:
    const: silergy,sy7636a

  reg:
    description:
      I2C device address.
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  '#thermal-sensor-cells':
    const: 0

  epd-pwr-good-gpios:
    description:
      Specifying the power good GPIOs.
    maxItems: 1

  regulators:
    type: object

    properties:
      compatible:
        const: silergy,sy7636a-regulator

      vcom:
        type: object
        $ref: /schemas/regulator/regulator.yaml#
        unevaluatedProperties: false
        description:
          The regulator for the compenstation voltage. Enabling/disabling this
          enables/disables the entire device.
        properties:
          regulator-name:
            const: vcom

    additionalProperties: false

required:
  - compatible
  - reg
  - '#thermal-sensor-cells'

additionalProperties: false

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

      pmic@62 {
        compatible = "silergy,sy7636a";
        reg = <0x62>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_epdpmic>;
        #thermal-sensor-cells = <0>;

        regulators {
          reg_epdpmic: vcom {
            regulator-name = "vcom";
            regulator-boot-on;
          };
        };
      };
    };
...


code:
SKY81452 bindings

Required properties:
- compatible	: Must be "skyworks,sky81452"
- reg		: I2C slave address

Required child nodes:
- backlight	: container node for backlight following the binding
		in leds/backlight/sky81452-backlight.txt
- regulator	: container node for regulators following the binding
		in regulator/sky81452-regulator.txt

Example:

	sky81452@2c {
		compatible = "skyworks,sky81452";
		reg = <0x2c>;

		backlight {
			compatible = "skyworks,sky81452-backlight";
			name = "pwm-backlight";
			led-sources = <0 1 2 3 6>;
			skyworks,ignore-pwm;
			skyworks,phase-shift;
			skyworks,current-limit = <2300>;
		};

		regulator {
			lout {
				regulator-name = "sky81452-lout";
				regulator-min-microvolt = <4500000>;
				regulator-max-microvolt = <8000000>;
			};
		};
	};


code:
Spreadtrum SC27xx Power Management Integrated Circuit (PMIC)

The Spreadtrum SC27xx series PMICs contain SC2720, SC2721, SC2723, SC2730
and SC2731. The Spreadtrum PMIC belonging to SC27xx series integrates all
mobile handset power management, audio codec, battery management and user
interface support function in a single chip. It has 6 major functional
blocks:
- DCDCs to support CPU, memory.
- LDOs to support both internal and external requirement.
- Battery management system, such as charger, fuel gauge.
- Audio codec.
- User interface function, such as indicator, flash LED and so on.
- IC level interface, such as power on/off control, RTC and typec and so on.

Required properties:
- compatible: Should be one of the following:
	"sprd,sc2720"
	"sprd,sc2721"
	"sprd,sc2723"
	"sprd,sc2730"
	"sprd,sc2731"
- reg: The address of the device chip select, should be 0.
- spi-max-frequency: Typically set to 26000000.
- interrupts: The interrupt line the device is connected to.
- interrupt-controller: Marks the device node as an interrupt controller.
- #interrupt-cells: The number of cells to describe an PMIC IRQ, must be 2.
- #address-cells: Child device offset number of cells, must be 1.
- #size-cells: Child device size number of cells, must be 0.

Example:
pmic@0 {
	compatible = "sprd,sc2731";
	reg = <0>;
	spi-max-frequency = <26000000>;
	interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
	interrupt-controller;
	#interrupt-cells = <2>;
	#address-cells = <1>;
	#size-cells = <0>;
};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright 2022 Unisoc Inc.
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/sprd,ums512-glbreg.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Unisoc System Global Register

maintainers:
  - Orson Zhai <orsonzhai@gmail.com>
  - Baolin Wang <baolin.wang7@gmail.com>
  - Chunyan Zhang <zhang.lyra@gmail.com>

description:
  Unisoc system global registers provide register map
  for clocks and some multimedia modules of the SoC.

properties:
  compatible:
    items:
      - const: sprd,ums512-glbregs
      - const: syscon
      - const: simple-mfd

  "#address-cells":
    const: 1

  "#size-cells":
    const: 1

  ranges:
    maxItems: 1

  reg:
    maxItems: 1

patternProperties:
  "^clock-controller@[0-9a-f]+$":
    type: object
    $ref: /schemas/clock/sprd,ums512-clk.yaml#
    description:
      Clock controller for the SoC clocks.

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    ap_apb_regs: syscon@71000000 {
      compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd";
      reg = <0x71000000 0x3000>;
      #address-cells = <1>;
      #size-cells = <1>;
      ranges = <0 0x71000000 0x3000>;

      clock-controller@0 {
        compatible = "sprd,ums512-apahb-gate";
        reg = <0x0 0x2000>;
        #clock-cells = <1>;
      };
    };

  - |
    ap_intc5_regs: syscon@32360000 {
      compatible = "sprd,ums512-glbregs", "syscon", "simple-mfd";
      reg = <0x32360000 0x1000>;
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/st,stm32-lptimer.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: STMicroelectronics STM32 Low-Power Timers bindings

description: |
  The STM32 Low-Power Timer (LPTIM) is a 16-bit timer that provides several
  functions
   - PWM output (with programmable prescaler, configurable polarity)
   - Trigger source for STM32 ADC/DAC (LPTIM_OUT)
   - Several counter modes:
     - quadrature encoder to detect angular position and direction of rotary
       elements, from IN1 and IN2 input signals.
     - simple counter from IN1 input signal.

maintainers:
  - Fabrice Gasnier <fabrice.gasnier@foss.st.com>

properties:
  compatible:
    const: st,stm32-lptimer

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: mux

  interrupts:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  wakeup-source: true

  pwm:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-pwm-lp

      "#pwm-cells":
        const: 3

    required:
      - "#pwm-cells"
      - compatible

  counter:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-lptimer-counter

    required:
      - compatible

  timer:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-lptimer-timer

    required:
      - compatible

patternProperties:
  "^trigger@[0-9]+$":
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-lptimer-trigger

      reg:
        description: Identify trigger hardware block.
        items:
          minimum: 0
          maximum: 2

    required:
      - compatible
      - reg

required:
  - "#address-cells"
  - "#size-cells"
  - compatible
  - reg
  - clocks
  - clock-names

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/stm32mp1-clks.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    timer@40002400 {
      compatible = "st,stm32-lptimer";
      reg = <0x40002400 0x400>;
      clocks = <&timer_clk>;
      clock-names = "mux";
      interrupts-extended = <&exti 47 IRQ_TYPE_LEVEL_HIGH>;
      #address-cells = <1>;
      #size-cells = <0>;

      pwm {
        compatible = "st,stm32-pwm-lp";
        #pwm-cells = <3>;
      };

      trigger@0 {
        compatible = "st,stm32-lptimer-trigger";
        reg = <0>;
      };

      counter {
        compatible = "st,stm32-lptimer-counter";
      };

      timer {
        compatible = "st,stm32-lptimer-timer";
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/st,stm32-timers.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: STMicroelectronics STM32 Timers bindings

description: |
  This hardware block provides 3 types of timer along with PWM functionality:
    - advanced-control timers consist of a 16-bit auto-reload counter driven
      by a programmable prescaler, break input feature, PWM outputs and
      complementary PWM outputs channels.
    - general-purpose timers consist of a 16-bit or 32-bit auto-reload counter
      driven by a programmable prescaler and PWM outputs.
    - basic timers consist of a 16-bit auto-reload counter driven by a
      programmable prescaler.

maintainers:
  - Fabrice Gasnier <fabrice.gasnier@foss.st.com>

properties:
  compatible:
    const: st,stm32-timers

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    items:
      - const: int

  resets:
    maxItems: 1

  dmas:
    minItems: 1
    maxItems: 7

  dma-names:
    items:
      enum: [ ch1, ch2, ch3, ch4, up, trig, com ]
    minItems: 1
    maxItems: 7

  interrupts:
    oneOf:
      - maxItems: 1
      - maxItems: 4

  interrupt-names:
    oneOf:
      - items:
          - const: global
      - items:
          - const: brk
          - const: up
          - const: trg-com
          - const: cc

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  pwm:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-pwm

      "#pwm-cells":
        const: 3

      st,breakinput:
        description:
          One or two <index level filter> to describe break input
          configurations.
        $ref: /schemas/types.yaml#/definitions/uint32-matrix
        items:
          items:
            - description: |
                "index" indicates on which break input (0 or 1) the
                configuration should be applied.
              enum: [0, 1]
            - description: |
                "level" gives the active level (0=low or 1=high) of the
                input signal for this configuration
              enum: [0, 1]
            - description: |
                "filter" gives the filtering value (up to 15) to be applied.
              maximum: 15
        minItems: 1
        maxItems: 2

    required:
      - "#pwm-cells"
      - compatible

  counter:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: st,stm32-timer-counter

    required:
      - compatible

patternProperties:
  "^timer@[0-9]+$":
    type: object
    additionalProperties: false

    properties:
      compatible:
        enum:
          - st,stm32-timer-trigger
          - st,stm32h7-timer-trigger

      reg:
        description: Identify trigger hardware block.
        items:
          minimum: 0
          maximum: 16

    required:
      - compatible
      - reg

required:
  - compatible
  - reg
  - clocks
  - clock-names

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/stm32mp1-clks.h>
    timers2: timer@40000000 {
      #address-cells = <1>;
      #size-cells = <0>;
      compatible = "st,stm32-timers";
      reg = <0x40000000 0x400>;
      clocks = <&rcc TIM2_K>;
      clock-names = "int";
      dmas = <&dmamux1 18 0x400 0x1>,
             <&dmamux1 19 0x400 0x1>,
             <&dmamux1 20 0x400 0x1>,
             <&dmamux1 21 0x400 0x1>,
             <&dmamux1 22 0x400 0x1>;
      dma-names = "ch1", "ch2", "ch3", "ch4", "up";
      pwm {
        compatible = "st,stm32-pwm";
        #pwm-cells = <3>;
        st,breakinput = <0 1 5>;
      };
      timer@1 {
        compatible = "st,stm32-timer-trigger";
        reg = <1>;
      };
      counter {
        compatible = "st,stm32-timer-counter";
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/st,stmfx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: STMicroelectonics Multi-Function eXpander (STMFX) bindings

description: ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
               communication with the main MCU. Its main features are GPIO expansion,
               main MCU IDD measurement (IDD is the amount of current that flows
               through VDD) and resistive touchscreen controller.

maintainers:
  - Amelie Delaunay <amelie.delaunay@foss.st.com>

properties:
  compatible:
    const: st,stmfx-0300

  reg:
    enum: [ 0x42, 0x43 ]

  interrupts:
    maxItems: 1

  drive-open-drain: true

  vdd-supply: true

  pinctrl:
    type: object

    properties:
      compatible:
        const: st,stmfx-0300-pinctrl

      "#gpio-cells":
        const: 2

      "#interrupt-cells":
        const: 2

      gpio-controller: true

      interrupt-controller: true

      gpio-ranges:
        description: if all STMFX pins[24:0] are available (no other STMFX function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
                     if agpio[3:0] are not available (STMFX Touchscreen function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
                     if agpio[7:4] are not available (STMFX IDD function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
        maxItems: 1

    patternProperties:
      "^[a-zA-Z]*-pins$":
        type: object
        additionalProperties: false

        allOf:
          - $ref: ../pinctrl/pinmux-node.yaml

        properties:
          pins: true
          bias-disable: true
          bias-pull-up: true
          bias-pull-pin-default: true
          bias-pull-down: true
          drive-open-drain: true
          drive-push-pull: true
          output-high: true
          output-low: true

    additionalProperties: false

    required:
      - compatible
      - "#gpio-cells"
      - "#interrupt-cells"
      - gpio-controller
      - interrupt-controller
      - gpio-ranges

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      stmfx@42 {
        compatible = "st,stmfx-0300";
        reg = <0x42>;
        interrupts = <8 IRQ_TYPE_EDGE_RISING>;
        interrupt-parent = <&gpioi>;
        vdd-supply = <&v3v3>;

        stmfx_pinctrl: pinctrl {
          compatible = "st,stmfx-0300-pinctrl";
          #gpio-cells = <2>;
          #interrupt-cells = <2>;
          gpio-controller;
          interrupt-controller;
          gpio-ranges = <&stmfx_pinctrl 0 0 24>;

          joystick_pins: joystick-pins {
            pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
            drive-push-pull;
            bias-pull-up;
          };
        };
      };
    };
...