code:
* Dialog DA9062 Power Management Integrated Circuit (PMIC)

Product information for the DA9062 and DA9061 devices can be found here:
- https://www.dialog-semiconductor.com/products/da9062
- https://www.dialog-semiconductor.com/products/da9061

The DA9062 PMIC consists of:

Device                   Supply Names    Description
------                   ------------    -----------
da9062-regulator        :               : LDOs & BUCKs
da9062-rtc              :               : Real-Time Clock
da9062-onkey            :               : On Key
da9062-watchdog         :               : Watchdog Timer
da9062-thermal          :               : Thermal
da9062-gpio             :               : GPIOs

The DA9061 PMIC consists of:

Device                   Supply Names    Description
------                   ------------    -----------
da9062-regulator        :               : LDOs & BUCKs
da9062-onkey            :               : On Key
da9062-watchdog         :               : Watchdog Timer
da9062-thermal          :               : Thermal

======

Required properties:

- compatible : Should be
    "dlg,da9062" for DA9062
    "dlg,da9061" for DA9061
- reg : Specifies the I2C slave address (this defaults to 0x58 but it can be
  modified to match the chip's OTP settings).
- interrupts : IRQ line information.
- interrupt-controller

See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
further information on IRQ bindings.

Optional properties:

- gpio-controller : Marks the device as a gpio controller.
- #gpio-cells     : Should be two. The first cell is the pin number and the
                    second cell is used to specify the gpio polarity.

See Documentation/devicetree/bindings/gpio/gpio.txt for further information on
GPIO bindings.

Sub-nodes:

- regulators : This node defines the settings for the LDOs and BUCKs.
  The DA9062 regulators are bound using their names listed below:

    buck1    : BUCK_1
    buck2    : BUCK_2
    buck3    : BUCK_3
    buck4    : BUCK_4
    ldo1     : LDO_1
    ldo2     : LDO_2
    ldo3     : LDO_3
    ldo4     : LDO_4

  The DA9061 regulators are bound using their names listed below:

    buck1    : BUCK_1
    buck2    : BUCK_2
    buck3    : BUCK_3
    ldo1     : LDO_1
    ldo2     : LDO_2
    ldo3     : LDO_3
    ldo4     : LDO_4

  The component follows the standard regulator framework and the bindings
  details of individual regulator device can be found in:
  Documentation/devicetree/bindings/regulator/regulator.txt

  regulator-initial-mode may be specified for buck regulators using mode values
  from include/dt-bindings/regulator/dlg,da9063-regulator.h.

- rtc : This node defines settings required for the Real-Time Clock associated
  with the DA9062. There are currently no entries in this binding, however
  compatible = "dlg,da9062-rtc" should be added if a node is created.

- onkey : See ../input/da9062-onkey.txt

- watchdog: See ../watchdog/da9062-watchdog.txt

- thermal : See ../thermal/da9062-thermal.txt

Example:

	pmic0: da9062@58 {
		compatible = "dlg,da9062";
		reg = <0x58>;
		interrupt-parent = <&gpio6>;
		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
		interrupt-controller;

		rtc {
			compatible = "dlg,da9062-rtc";
		};

		regulators {
			DA9062_BUCK1: buck1 {
				regulator-name = "BUCK1";
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1570000>;
				regulator-min-microamp = <500000>;
				regulator-max-microamp = <2000000>;
				regulator-initial-mode = <DA9063_BUCK_MODE_SYNC>;
				regulator-boot-on;
			};
			DA9062_LDO1: ldo1 {
				regulator-name = "LDO_1";
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <3600000>;
				regulator-boot-on;
			};
		};
	};


code:
Dialog Semiconductor DA9150 Combined Charger/Fuel-Gauge MFD bindings

DA9150 consists of a group of sub-devices:

Device			 Description
------			 -----------
da9150-gpadc		: General Purpose ADC
da9150-charger		: Battery Charger
da9150-fg		: Battery Fuel-Gauge

======

Required properties:
- compatible : Should be "dlg,da9150"
- reg: Specifies the I2C slave address
- interrupts: IRQ line info for da9150 chip.
- interrupt-controller: da9150 has internal IRQs (own IRQ domain).
  (See ../interrupt-controller/interrupts.txt for
   further information relating to interrupt properties)

Sub-devices:
- da9150-gpadc: See ../iio/adc/da9150-gpadc.txt
- da9150-charger: See ../power/da9150-charger.txt
- da9150-fg: See ../power/da9150-fg.txt

Example:

	charger_fg: da9150@58 {
		compatible = "dlg,da9150";
		reg = <0x58>;
		interrupt-parent = <&gpio6>;
		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
		interrupt-controller;

		gpadc: da9150-gpadc {
			compatible = "dlg,da9150-gpadc";
			#io-channel-cells = <1>;
		};

		charger {
			compatible = "dlg,da9150-charger";

			io-channels = <&gpadc 0>,
				      <&gpadc 2>,
				      <&gpadc 8>,
				      <&gpadc 5>;
			io-channel-names = "CHAN_IBUS",
					   "CHAN_VBUS",
					   "CHAN_TJUNC",
					   "CHAN_VBAT";
		};

		fuel-gauge {
			compatible = "dlg,da9150-fuel-gauge";

			dlg,update-interval = <10000>;
			dlg,warn-soc-level = /bits/ 8 <15>;
			dlg,crit-soc-level = /bits/ 8 <5>
		};
	};

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/delta,tn48m-cpld.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Delta Networks TN48M CPLD controller

maintainers:
  - Robert Marko <robert.marko@sartura.hr>

description: |
  Lattice CPLD onboard the TN48M switches is used for system
  management.

  It provides information about the hardware model, revision,
  PSU status etc.

  It is also being used as a GPIO expander and reset controller
  for the switch MAC-s and other peripherals.

properties:
  compatible:
    const: delta,tn48m-cpld

  reg:
    description:
      I2C device address.
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

required:
  - compatible
  - reg
  - "#address-cells"
  - "#size-cells"

patternProperties:
  "^gpio(@[0-9a-f]+)?$":
    $ref: ../gpio/delta,tn48m-gpio.yaml

  "^reset-controller?$":
    $ref: ../reset/delta,tn48m-reset.yaml

additionalProperties: false

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

        cpld@41 {
            compatible = "delta,tn48m-cpld";
            reg = <0x41>;
            #address-cells = <1>;
            #size-cells = <0>;

            gpio@31 {
                compatible = "delta,tn48m-gpo";
                reg = <0x31>;
                gpio-controller;
                #gpio-cells = <2>;
            };

            gpio@3a {
                compatible = "delta,tn48m-gpi";
                reg = <0x3a>;
                gpio-controller;
                #gpio-cells = <2>;
            };

            gpio@40 {
                compatible = "delta,tn48m-gpi";
                reg = <0x40>;
                gpio-controller;
                #gpio-cells = <2>;
            };

            reset-controller {
              compatible = "delta,tn48m-reset";
              #reset-cells = <1>;
            };
        };
    };


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

title: Dialog DA9063/DA9063L Power Management Integrated Circuit (PMIC)

maintainers:
  - Steve Twiss <stwiss.opensource@diasemi.com>

description: |
  For device-tree bindings of other sub-modules refer to the binding documents
  under the respective sub-system directories.

properties:
  compatible:
    enum:
      - dlg,da9063
      - dlg,da9063l

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  "#interrupt-cells":
    const: 2

  dlg,use-sw-pm:
    type: boolean
    description:
      Disable the watchdog during suspend.
      Only use this option if you can't use the watchdog automatic suspend
      function during a suspend (see register CONTROL_B).

  watchdog:
    type: object
    $ref: /schemas/watchdog/watchdog.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        const: dlg,da9063-watchdog

  rtc:
    type: object
    $ref: /schemas/rtc/rtc.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        const: dlg,da9063-rtc

  onkey:
    type: object
    $ref: /schemas/input/input.yaml#
    unevaluatedProperties: false
    properties:
      compatible:
        const: dlg,da9063-onkey

      dlg,disable-key-power:
        type: boolean
        description: |
          Disable power-down using a long key-press.
          If this entry does not exist then by default the key-press triggered
          power down is enabled and the OnKey will support both KEY_POWER and
          KEY_SLEEP.

  regulators:
    type: object
    additionalProperties: false
    patternProperties:
      "^(ldo([1-9]|1[01])|bcore([1-2]|s-merged)|b(pro|mem|io|peri)|bmem-bio-merged)$":
        $ref: /schemas/regulator/regulator.yaml
        unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - interrupt-controller

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      pmic@58 {
        compatible = "dlg,da9063";
        reg = <0x58>;
        #interrupt-cells = <2>;
        interrupt-parent = <&gpio6>;
        interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
        interrupt-controller;

        rtc {
          compatible = "dlg,da9063-rtc";
        };

        watchdog {
          compatible = "dlg,da9063-watchdog";
        };

        onkey {
          compatible = "dlg,da9063-onkey";
          dlg,disable-key-power;
        };

        regulators {
          bcore1 {
            regulator-name = "BCORE1";
            regulator-min-microvolt = <300000>;
            regulator-max-microvolt = <1570000>;
            regulator-min-microamp = <500000>;
            regulator-max-microamp = <2000000>;
            regulator-boot-on;
          };
          ldo11 {
            regulator-name = "LDO_11";
            regulator-min-microvolt = <900000>;
            regulator-max-microvolt = <3600000>;
            regulator-boot-on;
          };
        };
      };
    };
...


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

title: ENE KB3930 Embedded Controller bindings

description: |
  This binding describes the ENE KB3930 Embedded Controller attached to an
  I2C bus.

maintainers:
  - Lubomir Rintel <lkundrak@v3.sk>

properties:
  compatible:
    items:
      - enum:
          - dell,wyse-ariel-ec  # Dell Wyse Ariel board (3020)
      - const: ene,kb3930
  reg:
    maxItems: 1

  off-gpios:
    description: GPIO used with the shutdown protocol on Ariel
    maxItems: 2

  system-power-controller: true

required:
  - compatible
  - reg

additionalProperties: false

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

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

      embedded-controller@58 {
        compatible = "dell,wyse-ariel-ec", "ene,kb3930";
        reg = <0x58>;
        system-power-controller;

        off-gpios = <&gpio 126 GPIO_ACTIVE_HIGH>,
                    <&gpio 127 GPIO_ACTIVE_HIGH>;
      };
    };

...


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

title: ENE KB930 Embedded Controller bindings

description: |
  This binding describes the ENE KB930 Embedded Controller attached to an
  I2C bus.

maintainers:
  - Dmitry Osipenko <digetx@gmail.com>

$ref: /schemas/power/supply/power-supply.yaml

properties:
  compatible:
    items:
      - enum:
          - acer,a500-iconia-ec # Acer A500 Iconia tablet device
      - const: ene,kb930
  reg:
    maxItems: 1

  system-power-controller: true

required:
  - compatible
  - reg

unevaluatedProperties: false

examples:
  - |
    battery: battery-cell {
      compatible = "simple-battery";
      charge-full-design-microamp-hours = <3260000>;
      energy-full-design-microwatt-hours = <24000000>;
      operating-range-celsius = <0 40>;
    };

    mains: ac-adapter {
      compatible = "gpio-charger";
      charger-type = "mains";
      gpios = <&gpio 125 0>;
    };

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

      embedded-controller@58 {
        compatible = "acer,a500-iconia-ec", "ene,kb930";
        reg = <0x58>;

        system-power-controller;

        monitored-battery = <&battery>;
        power-supplies = <&mains>;
      };
    };

...


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

title: Freescale i.MX8qm/qxp Control and Status Registers Module Bindings

maintainers:
  - Liu Ying <victor.liu@nxp.com>

description: |
  As a system controller, the Freescale i.MX8qm/qxp Control and Status
  Registers(CSR) module represents a set of miscellaneous registers of a
  specific subsystem.  It may provide control and/or status report interfaces
  to a mix of standalone hardware devices within that subsystem.  One typical
  use-case is for some other nodes to acquire a reference to the syscon node
  by phandle, and the other typical use-case is that the operating system
  should consider all subnodes of the CSR module as separate child devices.

properties:
  $nodename:
    pattern: "^syscon@[0-9a-f]+$"

  compatible:
    items:
      - enum:
          - fsl,imx8qxp-mipi-lvds-csr
          - fsl,imx8qm-lvds-csr
      - const: syscon
      - const: simple-mfd

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    const: ipg

patternProperties:
  "^(ldb|phy|pxl2dpi)$":
    type: object
    description: The possible child devices of the CSR module.

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

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: fsl,imx8qxp-mipi-lvds-csr
    then:
      required:
        - pxl2dpi
        - ldb

  - if:
      properties:
        compatible:
          contains:
            const: fsl,imx8qm-lvds-csr
    then:
      required:
        - phy
        - ldb

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/imx8-lpcg.h>
    #include <dt-bindings/firmware/imx/rsrc.h>
    mipi_lvds_0_csr: syscon@56221000 {
        compatible = "fsl,imx8qxp-mipi-lvds-csr", "syscon", "simple-mfd";
        reg = <0x56221000 0x1000>;
        clocks = <&mipi_lvds_0_di_mipi_lvds_regs_lpcg IMX_LPCG_CLK_4>;
        clock-names = "ipg";

        mipi_lvds_0_pxl2dpi: pxl2dpi {
            compatible = "fsl,imx8qxp-pxl2dpi";
            fsl,sc-resource = <IMX_SC_R_MIPI_0>;
            power-domains = <&pd IMX_SC_R_MIPI_0>;

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

                port@0 {
                    #address-cells = <1>;
                    #size-cells = <0>;
                    reg = <0>;

                    mipi_lvds_0_pxl2dpi_dc0_pixel_link0: endpoint@0 {
                        reg = <0>;
                        remote-endpoint = <&dc0_pixel_link0_mipi_lvds_0_pxl2dpi>;
                    };

                    mipi_lvds_0_pxl2dpi_dc0_pixel_link1: endpoint@1 {
                        reg = <1>;
                        remote-endpoint = <&dc0_pixel_link1_mipi_lvds_0_pxl2dpi>;
                    };
                };

                port@1 {
                    #address-cells = <1>;
                    #size-cells = <0>;
                    reg = <1>;

                    mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0: endpoint@0 {
                        reg = <0>;
                        remote-endpoint = <&mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi>;
                    };

                    mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1: endpoint@1 {
                        reg = <1>;
                        remote-endpoint = <&mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi>;
                    };
                };
            };
        };

        mipi_lvds_0_ldb: ldb {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "fsl,imx8qxp-ldb";
            clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_MISC2>,
                     <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_BYPASS>;
            clock-names = "pixel", "bypass";
            power-domains = <&pd IMX_SC_R_LVDS_0>;

            channel@0 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0>;
                phys = <&mipi_lvds_0_phy>;
                phy-names = "lvds_phy";

                port@0 {
                    reg = <0>;

                    mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi: endpoint {
                        remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0>;
                    };
                };

                port@1 {
                    reg = <1>;

                    /* ... */
                };
            };

            channel@1 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <1>;
                phys = <&mipi_lvds_0_phy>;
                phy-names = "lvds_phy";

                port@0 {
                    reg = <0>;

                    mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi: endpoint {
                        remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1>;
                    };
                };

                port@1 {
                    reg = <1>;

                    /* ... */
                };
            };
        };
    };

    mipi_lvds_0_phy: phy@56228300 {
        compatible = "fsl,imx8qxp-mipi-dphy";
        reg = <0x56228300 0x100>;
        clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_PHY>;
        clock-names = "phy_ref";
        #phy-cells = <0>;
        fsl,syscon = <&mipi_lvds_0_csr>;
        power-domains = <&pd IMX_SC_R_MIPI_0>;
    };


code:
Freescale MX25 ADC/TSC MultiFunction Device (MFD)

This device combines two general purpose conversion queues one used for general
ADC and the other used for touchscreens.

Required properties:
 - compatible:			Should be "fsl,imx25-tsadc".
 - reg:				Start address and size of the memory area of
 					the device
 - interrupts:			Interrupt for this device
					(See: ../interrupt-controller/interrupts.txt)
 - clocks:			An 'ipg' clock (See: ../clock/clock-bindings.txt)
 - interrupt-controller:	This device is an interrupt controller. It
   					controls the interrupts of both
					conversion queues.
 - #interrupt-cells:		Should be '<1>'.
 - #address-cells:		Should be '<1>'.
 - #size-cells:			Should be '<1>'.

This device includes two conversion queues which can be added as subnodes.
The first queue is for the touchscreen, the second for general purpose ADC.

Example:
	tscadc: tscadc@50030000 {
		compatible = "fsl,imx25-tsadc";
		reg = <0x50030000 0xc>;
		interrupts = <46>;
		clocks = <&clks 119>;
		clock-names = "ipg";
		interrupt-controller;
		#interrupt-cells = <1>;
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		tsc: tcq@50030400 {
			compatible = "fsl,imx25-tcq";
			reg = <0x50030400 0x60>;
			...
		};

		adc: gcq@50030800 {
			compatible = "fsl,imx25-gcq";
			reg = <0x50030800 0x60>;
			...
		};
	};


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

title: Gateworks System Controller

description: |
  The Gateworks System Controller (GSC) is a device present across various
  Gateworks product families that provides a set of system related features
  such as the following (refer to the board hardware user manuals to see what
  features are present)
   - Watchdog Timer
   - GPIO
   - Pushbutton controller
   - Hardware monitor with ADC's for temperature and voltage rails and
     fan controller

maintainers:
  - Tim Harvey <tharvey@gateworks.com>

properties:
  $nodename:
    pattern: "gsc@[0-9a-f]{1,2}"
  compatible:
    const: gw,gsc

  reg:
    description: I2C device address
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  "#interrupt-cells":
    const: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  adc:
    type: object
    additionalProperties: false
    description: Optional hardware monitoring module

    properties:
      compatible:
        const: gw,gsc-adc

      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

    patternProperties:
      "^channel@[0-9a-f]+$":
        type: object
        additionalProperties: false
        description: |
          Properties for a single ADC which can report cooked values
          (i.e. temperature sensor based on thermister), raw values
          (i.e. voltage rail with a pre-scaling resistor divider).

        properties:
          reg:
            description: Register of the ADC
            maxItems: 1

          label:
            description: Name of the ADC input

          gw,mode:
            description: |
              conversion mode:
                0 - temperature, in C*10
                1 - pre-scaled 24-bit voltage value
                2 - scaled voltage based on an optional resistor divider
                    and optional offset
                3 - pre-scaled 16-bit voltage value
                4 - fan tach input to report RPM's
            $ref: /schemas/types.yaml#/definitions/uint32
            enum: [0, 1, 2, 3, 4]

          gw,voltage-divider-ohms:
            description: Values of resistors for divider on raw ADC input
            maxItems: 2
            items:
              minimum: 1000
              maximum: 1000000

          gw,voltage-offset-microvolt:
            description: |
              A positive voltage offset to apply to a raw ADC
              (i.e. to compensate for a diode drop).
            minimum: 0
            maximum: 1000000

        required:
          - gw,mode
          - reg
          - label

    required:
      - compatible
      - "#address-cells"
      - "#size-cells"

patternProperties:
  "^fan-controller@[0-9a-f]+$":
    type: object
    additionalProperties: false
    description: Optional fan controller

    properties:
      compatible:
        const: gw,gsc-fan

      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

      reg:
        description: The fan controller base address
        maxItems: 1

    required:
      - compatible
      - reg
      - "#address-cells"
      - "#size-cells"

required:
  - compatible
  - reg
  - interrupts
  - interrupt-controller
  - "#interrupt-cells"
  - "#address-cells"
  - "#size-cells"

additionalProperties: false

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

        gsc@20 {
            compatible = "gw,gsc";
            reg = <0x20>;
            interrupt-parent = <&gpio1>;
            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
            interrupt-controller;
            #interrupt-cells = <1>;
            #address-cells = <1>;
            #size-cells = <0>;

            adc {
                compatible = "gw,gsc-adc";
                #address-cells = <1>;
                #size-cells = <0>;

                channel@0 { /* A0: Board Temperature */
                    reg = <0x00>;
                    label = "temp";
                    gw,mode = <0>;
                };

                channel@2 { /* A1: Input Voltage (raw ADC) */
                    reg = <0x02>;
                    label = "vdd_vin";
                    gw,mode = <1>;
                    gw,voltage-divider-ohms = <22100 1000>;
                    gw,voltage-offset-microvolt = <800000>;
                };

                channel@b { /* A2: Battery voltage */
                    reg = <0x0b>;
                    label = "vdd_bat";
                    gw,mode = <1>;
                };
            };

            fan-controller@2c {
                #address-cells = <1>;
                #size-cells = <0>;
                compatible = "gw,gsc-fan";
                reg = <0x2c>;
            };
        };
    };


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

title: ChromeOS Embedded Controller

maintainers:
  - Benson Leung <bleung@chromium.org>
  - Guenter Roeck <groeck@chromium.org>

description:
  Google's ChromeOS EC is a microcontroller which talks to the AP and
  implements various functions such as keyboard and battery charging.
  The EC can be connected through various interfaces (I2C, SPI, and others)
  and the compatible string specifies which interface is being used.

properties:
  compatible:
    oneOf:
      - description:
          For implementations of the EC connected through I2C.
        const: google,cros-ec-i2c
      - description:
          For implementations of the EC connected through SPI.
        const: google,cros-ec-spi
      - description:
          For implementations of the FPMCU connected through SPI.
        items:
          - const: google,cros-ec-fp
          - const: google,cros-ec-spi
      - description:
          For implementations of the EC connected through RPMSG.
        const: google,cros-ec-rpmsg

  controller-data: true

  google,cros-ec-spi-pre-delay:
    description:
      This property specifies the delay in usecs between the
      assertion of the CS and the first clock pulse.
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 0

  google,cros-ec-spi-msg-delay:
    description:
      This property specifies the delay in usecs between messages.
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 0

  google,has-vbc-nvram:
    description:
      Some implementations of the EC include a small nvram space used to
      store verified boot context data. This boolean flag is used to specify
      whether this nvram is present or not.
    type: boolean

  mediatek,rpmsg-name:
    description:
      Must be defined if the cros-ec is a rpmsg device for a Mediatek
      ARM Cortex M4 Co-processor. Contains the name of the rpmsg
      device. Used to match the subnode to the rpmsg device announced by
      the SCP.
    $ref: "/schemas/types.yaml#/definitions/string"

  spi-max-frequency: true

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  boot0-gpios:
    maxItems: 1
    description: Assert for bootloader mode.

  vdd-supply: true

  wakeup-source:
    description: Button can wake-up the system.

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

  typec:
    $ref: "/schemas/chrome/google,cros-ec-typec.yaml#"

  ec-pwm:
    $ref: "/schemas/pwm/google,cros-ec-pwm.yaml#"
    deprecated: true

  pwm:
    $ref: "/schemas/pwm/google,cros-ec-pwm.yaml#"

  kbd-led-backlight:
    $ref: "/schemas/chrome/google,cros-kbd-led-backlight.yaml#"

  keyboard-controller:
    $ref: "/schemas/input/google,cros-ec-keyb.yaml#"

  proximity:
    $ref: "/schemas/iio/proximity/google,cros-ec-mkbp-proximity.yaml#"

  codecs:
    type: object
    additionalProperties: false

    properties:
      '#address-cells':
        const: 2

      '#size-cells':
        const: 1

    patternProperties:
      "^ec-codec@[a-f0-9]+$":
        type: object
        $ref: "/schemas/sound/google,cros-ec-codec.yaml#"

    required:
      - "#address-cells"
      - "#size-cells"

  cbas:
    type: object

    description:
      This device is used to signal when a detachable base is attached
      to a Chrome OS tablet. This device cannot be detected at runtime.

    properties:
      compatible:
        const: google,cros-cbas

    required:
      - compatible

    additionalProperties: false

patternProperties:
  "^i2c-tunnel[0-9]*$":
    type: object
    $ref: "/schemas/i2c/google,cros-ec-i2c-tunnel.yaml#"

  "^regulator@[0-9]+$":
    type: object
    $ref: "/schemas/regulator/google,cros-ec-regulator.yaml#"

  "^extcon[0-9]*$":
    type: object
    $ref: "/schemas/extcon/extcon-usbc-cros-ec.yaml#"

required:
  - compatible

allOf:
  - if:
      properties:
        compatible:
          not:
            contains:
              const: google,cros-ec-spi
    then:
      properties:
        controller-data: false
        google,cros-ec-spi-pre-delay: false
        google,cros-ec-spi-msg-delay: false
        spi-max-frequency: false
    else:
      $ref: /schemas/spi/spi-peripheral-props.yaml

  - if:
      properties:
        compatible:
          not:
            contains:
              const: google,cros-ec-rpmsg
    then:
      properties:
        mediatek,rpmsg-name: false

      required:
        - reg
        - interrupts

  - if:
      properties:
        compatible:
          contains:
            const: google,cros-ec-fp
    then:
      properties:
        '#address-cells': false
        '#size-cells': false
        typec: false
        ec-pwm: false
        kbd-led-backlight: false
        keyboard-controller: false
        proximity: false
        codecs: false
        cbas: false

      patternProperties:
        "^i2c-tunnel[0-9]*$": false
        "^regulator@[0-9]+$": false
        "^extcon[0-9]*$": false

      # Using additionalProperties: false here and
      # listing true properties doesn't work

      required:
        - reset-gpios
        - boot0-gpios
        - vdd-supply
    else:
      properties:
        reset-gpios: false
        boot0-gpios: false
        vdd-supply: false

additionalProperties: false

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

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

        cros-ec@1e {
            compatible = "google,cros-ec-i2c";
            reg = <0x1e>;
            interrupts = <6 0>;
            interrupt-parent = <&gpio0>;
        };
    };

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

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

        cros-ec@0 {
            compatible = "google,cros-ec-spi";
            reg = <0x0>;
            google,cros-ec-spi-msg-delay = <30>;
            google,cros-ec-spi-pre-delay = <10>;
            interrupts = <99 0>;
            interrupt-parent = <&gpio7>;
            spi-max-frequency = <5000000>;

            proximity {
                compatible = "google,cros-ec-mkbp-proximity";
            };

            cbas {
                compatible = "google,cros-cbas";
            };
        };
    };

  # Example for RPMSG
  - |
    scp0 {
        cros-ec {
            compatible = "google,cros-ec-rpmsg";
        };
    };

  # Example for FPMCU
  - |
    spi0 {
      #address-cells = <0x1>;
      #size-cells = <0x0>;

      ec@0 {
        compatible = "google,cros-ec-fp", "google,cros-ec-spi";
        reg = <0x0>;
        interrupt-parent = <&gpio_controller>;
        interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
        spi-max-frequency = <3000000>;
        reset-gpios = <&gpio_controller 5 GPIO_ACTIVE_LOW>;
        boot0-gpios = <&gpio_controller 10 GPIO_ACTIVE_HIGH>;
        vdd-supply = <&pp3300_fp_mcu>;
      };
    };
...


code:
* HI6421 Multi-Functional Device (MFD), by HiSilicon Ltd.

Required parent device properties:
- compatible    : One of the following chip-specific strings:
	"hisilicon,hi6421-pmic";
	"hisilicon,hi6421v530-pmic";
- reg		: register range space of hi6421;

Supported Hi6421 sub-devices include:

Device                     IRQ Names              Supply Names   Description
------                     ---------              ------------   -----------
regulators               :  None                 : None         : Regulators

Required child device properties:
None.

Example:
	hi6421 {
		compatible = "hisilicon,hi6421-pmic";
		reg = <0xfcc00000 0x0180>; /* 0x60 << 2 */

		regulators {
			// supply for MLC NAND/ eMMC
			hi6421_vout0_reg: hi6421_vout0 {
				regulator-name = "VOUT0";
				regulator-min-microvolt = <2850000>;
				regulator-max-microvolt = <2850000>;
			};

			// supply for 26M Oscillator
			hi6421_vout1_reg: hi6421_vout1 {
				regulator-name = "VOUT1";
				regulator-min-microvolt = <1700000>;
				regulator-max-microvolt = <2000000>;
				regulator-boot-on;
				regulator-always-on;
			};
		};
	};


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/hisilicon,hi6421-spmi-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: HiSilicon 6421v600 SPMI PMIC

maintainers:
  - Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

description: |
  HiSilicon 6421v600 should be connected inside a MIPI System Power Management
  (SPMI) bus. It provides interrupts and power supply.

  The GPIO and interrupt settings are represented as part of the top-level PMIC
  node.

  The SPMI controller part is provided by
  Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml

properties:
  $nodename:
    pattern: "pmic@[0-9a-f]"

  compatible:
    const: hisilicon,hi6421v600-spmi

  reg:
    maxItems: 1

  '#interrupt-cells':
    const: 2

  interrupt-controller: true

  interrupts:
    maxItems: 1

  regulators:
    type: object

    additionalProperties: false

    properties:
      '#address-cells':
        const: 1

      '#size-cells':
        const: 0

    patternProperties:
      '^ldo[0-9]+$':
        type: object

        $ref: "/schemas/regulator/regulator.yaml#"

        unevaluatedProperties: false

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

examples:
  - |

    pmic: pmic@0 {
      compatible = "hisilicon,hi6421v600-spmi";
      reg = <0 0>;

      #interrupt-cells = <2>;
      interrupt-controller;
      interrupt-parent = <&gpio28>;
      interrupts = <0 0>;

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

        ldo3: ldo3 {
          regulator-name = "ldo3";
          regulator-min-microvolt = <1500000>;
          regulator-max-microvolt = <2000000>;
          regulator-boot-on;
        };

        ldo4: ldo4 {
          regulator-name = "ldo4";
          regulator-min-microvolt = <1725000>;
          regulator-max-microvolt = <1900000>;
          regulator-boot-on;
        };

        ldo9: ldo9 {
          regulator-name = "ldo9";
          regulator-min-microvolt = <1750000>;
          regulator-max-microvolt = <3300000>;
          regulator-boot-on;
        };

        ldo15: ldo15 {
          regulator-name = "ldo15";
          regulator-min-microvolt = <1800000>;
          regulator-max-microvolt = <3000000>;
          regulator-always-on;
        };

        ldo16: ldo16 {
          regulator-name = "ldo16";
          regulator-min-microvolt = <1800000>;
          regulator-max-microvolt = <3000000>;
          regulator-boot-on;
        };

        ldo17: ldo17 {
          regulator-name = "ldo17";
          regulator-min-microvolt = <2500000>;
          regulator-max-microvolt = <3300000>;
        };

        ldo33: ldo33 {
          regulator-name = "ldo33";
          regulator-min-microvolt = <2500000>;
          regulator-max-microvolt = <3300000>;
          regulator-boot-on;
        };

        ldo34: ldo34 {
          regulator-name = "ldo34";
          regulator-min-microvolt = <2600000>;
          regulator-max-microvolt = <3300000>;
        };
      };
    };


code:
Hisilicon Hi655x Power Management Integrated Circuit (PMIC)

The hardware layout for access PMIC Hi655x from AP SoC Hi6220.
Between PMIC Hi655x and Hi6220, the physical signal channel is SSI.
We can use memory-mapped I/O to communicate.

+----------------+             +-------------+
|                |             |             |
|    Hi6220      |   SSI bus   |   Hi655x    |
|                |-------------|             |
|                |(REGMAP_MMIO)|             |
+----------------+             +-------------+

Required properties:
- compatible:           Should be "hisilicon,hi655x-pmic".
- reg:                  Base address of PMIC on Hi6220 SoC.
- interrupt-controller: Hi655x has internal IRQs (has own IRQ domain).
- pmic-gpios:           The GPIO used by PMIC IRQ.
- #clock-cells:		From common clock binding; shall be set to 0

Optional properties:
- clock-output-names: From common clock binding to override the
  default output clock name

Example:
	pmic: pmic@f8000000 {
		compatible = "hisilicon,hi655x-pmic";
		reg = <0x0 0xf8000000 0x0 0x1000>;
		interrupt-controller;
		#interrupt-cells = <2>;
		pmic-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
		#clock-cells = <0>;
	}


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

title: Azoteq IQS620A/621/622/624/625 Multi-Function Sensors

maintainers:
  - Jeff LaBundy <jeff@labundy.com>

description: |
  The Azoteq IQS620A, IQS621, IQS622, IQS624 and IQS625 multi-function sensors
  integrate multiple sensing technologies in a single package.

  Link to datasheets: https://www.azoteq.com/

properties:
  compatible:
    enum:
      - azoteq,iqs620a
      - azoteq,iqs621
      - azoteq,iqs622
      - azoteq,iqs624
      - azoteq,iqs625

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  firmware-name:
    $ref: /schemas/types.yaml#/definitions/string
    description:
      Specifies the name of the calibration and configuration file selected by
      the driver. If this property is omitted, the name is chosen based on the
      device name with ".bin" as the extension (e.g. iqs620a.bin for IQS620A).

  keys:
    $ref: ../input/iqs62x-keys.yaml

  pwm:
    $ref: ../pwm/iqs620a-pwm.yaml

required:
  - compatible
  - reg
  - interrupts

additionalProperties: false

examples:
  - |
    /*
     * Dual capacitive buttons with proximity-activated function, unipolar lid
     * switch and panel-mounted LED.
     */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

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

            iqs620a@44 {
                    compatible = "azoteq,iqs620a";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    keys {
                            compatible = "azoteq,iqs620a-keys";

                            linux,keycodes = <KEY_SELECT>,
                                             <KEY_MENU>,
                                             <KEY_OK>,
                                             <KEY_MENU>;

                            hall-switch-south {
                                    linux,code = <SW_LID>;
                                    azoteq,use-prox;
                            };
                    };

                    iqs620a_pwm: pwm {
                            compatible = "azoteq,iqs620a-pwm";
                            #pwm-cells = <2>;
                    };
            };
    };

    pwmleds {
            compatible = "pwm-leds";

            led-1 {
                    pwms = <&iqs620a_pwm 0 1000000>;
                    max-brightness = <255>;
            };
    };

  - |
    /* Single inductive button with bipolar dock/tablet-mode switch. */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

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

            iqs620a@44 {
                    compatible = "azoteq,iqs620a";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    firmware-name = "iqs620a_coil.bin";

                    keys {
                            compatible = "azoteq,iqs620a-keys";

                            linux,keycodes = <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <KEY_MUTE>;

                            hall-switch-north {
                                    linux,code = <SW_DOCK>;
                            };

                            hall-switch-south {
                                    linux,code = <SW_TABLET_MODE>;
                            };
                    };
            };
    };

  - |
    /* Dual capacitive buttons with volume knob. */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

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

            iqs624@44 {
                    compatible = "azoteq,iqs624";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    keys {
                            compatible = "azoteq,iqs624-keys";

                            linux,keycodes = <BTN_0>,
                                             <0>,
                                             <BTN_1>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <KEY_VOLUMEUP>,
                                             <KEY_VOLUMEDOWN>;
                    };
            };
    };

...


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

title: Khadas on-board Microcontroller

maintainers:
  - Neil Armstrong <neil.armstrong@linaro.org>

description: |
  Khadas embeds a microcontroller on their VIM and Edge boards adding some
  system feature as PWM Fan control (for VIM2 rev14 or VIM3), User memory
  storage, IR/Key resume control, system power LED control and more.

properties:
  compatible:
    enum:
      - khadas,mcu # MCU revision is discoverable

  "#cooling-cells": # Only needed for boards having FAN control feature
    const: 2

  reg:
    maxItems: 1

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      khadas_mcu: system-controller@18 {
        compatible = "khadas,mcu";
        reg = <0x18>;
        #cooling-cells = <2>;
      };
    };


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

title: Kontron's sl28cpld board management controller

maintainers:
  - Michael Walle <michael@walle.cc>

description: |
  The board management controller may contain different IP blocks like
  watchdog, fan monitoring, PWM controller, interrupt controller and a
  GPIO controller.

properties:
  compatible:
    const: kontron,sl28cpld

  reg:
    description:
      I2C device address.
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  "#interrupt-cells":
    const: 2

  interrupts:
    maxItems: 1

  interrupt-controller: true

patternProperties:
  "^gpio(@[0-9a-f]+)?$":
    $ref: ../gpio/kontron,sl28cpld-gpio.yaml

  "^hwmon(@[0-9a-f]+)?$":
    $ref: ../hwmon/kontron,sl28cpld-hwmon.yaml

  "^interrupt-controller(@[0-9a-f]+)?$":
    $ref: ../interrupt-controller/kontron,sl28cpld-intc.yaml

  "^pwm(@[0-9a-f]+)?$":
    $ref: ../pwm/kontron,sl28cpld-pwm.yaml

  "^watchdog(@[0-9a-f]+)?$":
    $ref: ../watchdog/kontron,sl28cpld-wdt.yaml

required:
  - "#address-cells"
  - "#size-cells"
  - compatible
  - reg

additionalProperties: false

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

        sl28cpld@4a {
            compatible = "kontron,sl28cpld";
            reg = <0x4a>;
            #address-cells = <1>;
            #size-cells = <0>;

            watchdog@4 {
                compatible = "kontron,sl28cpld-wdt";
                reg = <0x4>;
                kontron,assert-wdt-timeout-pin;
            };

            hwmon@b {
                compatible = "kontron,sl28cpld-fan";
                reg = <0xb>;
            };

            pwm@c {
                compatible = "kontron,sl28cpld-pwm";
                reg = <0xc>;
                #pwm-cells = <2>;
            };

            pwm@e {
                compatible = "kontron,sl28cpld-pwm";
                reg = <0xe>;
                #pwm-cells = <2>;
            };

            gpio@10 {
                compatible = "kontron,sl28cpld-gpio";
                reg = <0x10>;
                interrupts-extended = <&gpio2 6
                               IRQ_TYPE_EDGE_FALLING>;

                gpio-controller;
                #gpio-cells = <2>;
                gpio-line-names = "a", "b", "c";

                interrupt-controller;
                #interrupt-cells = <2>;
            };

            gpio@15 {
                compatible = "kontron,sl28cpld-gpio";
                reg = <0x15>;
                interrupts-extended = <&gpio2 6
                               IRQ_TYPE_EDGE_FALLING>;

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

                interrupt-controller;
                #interrupt-cells = <2>;
            };

            gpio@1a {
                compatible = "kontron,sl28cpld-gpo";
                reg = <0x1a>;

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

            gpio@1b {
                compatible = "kontron,sl28cpld-gpi";
                reg = <0x1b>;

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

            interrupt-controller@1c {
                compatible = "kontron,sl28cpld-intc";
                reg = <0x1c>;
                interrupts-extended = <&gpio2 6
                               IRQ_TYPE_EDGE_FALLING>;

                interrupt-controller;
                #interrupt-cells = <2>;
            };
        };
    };


code:
TI/National Semiconductor LP3943 MFD driver

Required properties:
  - compatible: "ti,lp3943"
  - reg: I2C slave address. From 0x60 to 0x67.

LP3943 consists of two sub-devices, lp3943-gpio and lp3943-pwm.

For the LP3943 GPIO properties please refer to:
Documentation/devicetree/bindings/gpio/gpio-lp3943.txt

For the LP3943 PWM properties please refer to:
Documentation/devicetree/bindings/pwm/pwm-lp3943.txt

Example:

lp3943@60 {
	compatible = "ti,lp3943";
	reg = <0x60>;

	gpioex: gpio {
		compatible = "ti,lp3943-gpio";
		gpio-controller;
		#gpio-cells = <2>;
	};

	pwm3943: pwm {
		compatible = "ti,lp3943-pwm";
		#pwm-cells = <2>;
		ti,pwm0 = <8 9 10>;
		ti,pwm1 = <15>;
	};
};


code:
TI LP873X PMIC MFD driver

Required properties:
  - compatible:	"ti,lp8732", "ti,lp8733"
  - reg:		I2C slave address.
  - gpio-controller:	Marks the device node as a GPIO Controller.
  - #gpio-cells:	Should be two.  The first cell is the pin number and
			the second cell is used to specify flags.
			See ../gpio/gpio.txt for more information.
  - xxx-in-supply:	Phandle to parent supply node of each regulator
			populated under regulators node. xxx can be
			buck0, buck1, ldo0 or ldo1.
  - regulators:	List of child nodes that specify the regulator
			initialization data.
Example:

pmic: lp8733@60 {
	compatible = "ti,lp8733";
	reg = <0x60>;
	gpio-controller;
	#gpio-cells = <2>;

	buck0-in-supply = <&vsys_3v3>;
	buck1-in-supply = <&vsys_3v3>;
	ldo0-in-supply = <&vsys_3v3>;
	ldo1-in-supply = <&vsys_3v3>;

	regulators {
		lp8733_buck0: buck0 {
			regulator-name = "lp8733-buck0";
			regulator-min-microvolt = <800000>;
			regulator-max-microvolt = <1400000>;
			regulator-min-microamp = <1500000>;
			regulator-max-microamp = <4000000>;
			regulator-ramp-delay = <10000>;
			regulator-always-on;
			regulator-boot-on;
		};

		lp8733_buck1: buck1 {
			regulator-name = "lp8733-buck1";
			regulator-min-microvolt = <800000>;
			regulator-max-microvolt = <1400000>;
			regulator-min-microamp = <1500000>;
			regulator-max-microamp = <4000000>;
			regulator-ramp-delay = <10000>;
			regulator-boot-on;
			regulator-always-on;
		};

		lp8733_ldo0: ldo0 {
			regulator-name = "lp8733-ldo0";
			regulator-min-microvolt = <800000>;
			regulator-max-microvolt = <3000000>;
			regulator-boot-on;
			regulator-always-on;
		};

		lp8733_ldo1: ldo1 {
			regulator-name = "lp8733-ldo1";
			regulator-min-microvolt = <800000>;
			regulator-max-microvolt = <3000000>;
			regulator-always-on;
			regulator-boot-on;
		};
	};
};


code:
MAX77620 Power management IC from Maxim Semiconductor.

Required properties:
-------------------
- compatible: Must be one of
		"maxim,max77620"
		"maxim,max20024"
		"maxim,max77663"
- reg: I2C device address.

Optional properties:
-------------------
- interrupts:		The interrupt on the parent the controller is
			connected to.
- interrupt-controller: Marks the device node as an interrupt controller.
- #interrupt-cells:	is <2> and their usage is compliant to the 2 cells
			variant of <../interrupt-controller/interrupts.txt>
			IRQ numbers for different interrupt source of MAX77620
			are defined at dt-bindings/mfd/max77620.h.

- system-power-controller: Indicates that this PMIC is controlling the
			   system power, see [1] for more details.

[1] Documentation/devicetree/bindings/power/power-controller.txt

Optional subnodes and their properties:
=======================================

Flexible power sequence configurations:
--------------------------------------
The Flexible Power Sequencer (FPS) allows each regulator to power up under
hardware or software control. Additionally, each regulator can power on
independently or among a group of other regulators with an adjustable power-up
and power-down delays (sequencing). GPIO1, GPIO2, and GPIO3 can be programmed
to be part of a sequence allowing external regulators to be sequenced along
with internal regulators. 32KHz clock can be programmed to be part of a
sequence.

The flexible sequencing structure consists of two hardware enable inputs
(EN0, EN1), and 3 master sequencing timers called FPS0, FPS1 and FPS2.
Each master sequencing timer is programmable through its configuration
register to have a hardware enable source (EN1 or EN2) or a software enable
source (SW). When enabled/disabled, the master sequencing timer generates
eight sequencing events on different time periods called slots. The time
period between each event is programmable within the configuration register.
Each regulator, GPIO1, GPIO2, GPIO3, and 32KHz clock has a flexible power
sequence slave register which allows its enable source to be specified as
a flexible power sequencer timer or a software bit. When a FPS source of
regulators, GPIOs and clocks specifies the enable source to be a flexible
power sequencer, the power up and power down delays can be specified in
the regulators, GPIOs and clocks flexible power sequencer configuration
registers.

When FPS event cleared (set to LOW), regulators, GPIOs and 32KHz
clock are set into following state at the sequencing event that
corresponds to its flexible sequencer configuration register.
	Sleep state: 			In this state, regulators, GPIOs
					and 32KHz clock get disabled at
					the sequencing event.
	Global Low Power Mode (GLPM):	In this state, regulators are set in
					low power mode at the sequencing event.

The configuration parameters of FPS is provided through sub-node "fps"
and their child for FPS specific. The child node name for FPS are "fps0",
"fps1", and "fps2" for FPS0, FPS1 and FPS2 respectively.

The FPS configurations like FPS source, power up and power down slots for
regulators, GPIOs and 32kHz clocks are provided in their respective
configuration nodes which is explained in respective sub-system DT
binding document.

There is need for different FPS configuration parameters based on system
state like when system state changed from active to suspend or active to
power off (shutdown).

Optional properties:
-------------------
-maxim,fps-event-source:		u32, FPS event source like external
					hardware input to PMIC i.e. EN0, EN1 or
					software (SW).
					The macros are defined on
						dt-bindings/mfd/max77620.h
					for different control source.
					- MAX77620_FPS_EVENT_SRC_EN0
						for hardware input pin EN0.
					- MAX77620_FPS_EVENT_SRC_EN1
						for hardware input pin EN1.
					- MAX77620_FPS_EVENT_SRC_SW
						for software control.

-maxim,shutdown-fps-time-period-us:	u32, FPS time period in microseconds
					when system enters in to shutdown
					state.

-maxim,suspend-fps-time-period-us:	u32, FPS time period in microseconds
					when system enters in to suspend state.

-maxim,device-state-on-disabled-event:	u32, describe the PMIC state when FPS
					event cleared (set to LOW) whether it
					should go to sleep state or low-power
					state. Following are valid values:
					- MAX77620_FPS_INACTIVE_STATE_SLEEP
						to set the PMIC state to sleep.
					- MAX77620_FPS_INACTIVE_STATE_LOW_POWER
						to set the PMIC state to low
						power.
					Absence of this property or other value
					will not change device state when FPS
					event get cleared.

Here supported time periods by device in microseconds are as follows:
MAX77620 supports 40, 80, 160, 320, 640, 1280, 2560 and 5120 microseconds.
MAX20024 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.
MAX77663 supports 20, 40, 80, 160, 320, 640, 1280 and 2540 microseconds.

-maxim,power-ok-control: configure map power ok bit
			1: Enables POK(Power OK) to control nRST_IO and GPIO1
			POK function.
			0: Disables POK control.
			if property missing, do not configure MPOK bit.
			If POK mapping is enabled for GPIO1/nRST_IO then,
			GPIO1/nRST_IO pins are HIGH only if all rails
			that have POK control enabled are HIGH.
			If any of the rails goes down(which are enabled for POK
			control) then, GPIO1/nRST_IO goes LOW.
			this property is valid for max20024 only.

For DT binding details of different sub modules like GPIO, pincontrol,
regulator, power, please refer respective device-tree binding document
under their respective sub-system directories.

Example:
--------
#include <dt-bindings/mfd/max77620.h>

max77620@3c {
	compatible = "maxim,max77620";
	reg = <0x3c>;

	interrupt-parent = <&intc>;
	interrupts = <0 86 IRQ_TYPE_NONE>;

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

	fps {
		fps0 {
			maxim,shutdown-fps-time-period-us = <1280>;
			maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN1>;
		};

		fps1 {
			maxim,shutdown-fps-time-period-us = <1280>;
			maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
		};

		fps2 {
			maxim,shutdown-fps-time-period-us = <1280>;
			maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_SW>;
		};
	};
};


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

title: MAX77650 ultra low-power PMIC from Maxim Integrated.

maintainers:
  - Bartosz Golaszewski <bgolaszewski@baylibre.com>

description: |
  MAX77650 is an ultra-low power PMIC providing battery charging and power
  supply for low-power IoT and wearable applications.

  The GPIO-controller module is represented as part of the top-level PMIC
  node. The device exposes a single GPIO line.

  For device-tree bindings of other sub-modules (regulator, power supply,
  LEDs and onkey) refer to the binding documents under the respective
  sub-system directories.

properties:
  compatible:
    const: maxim,max77650

  reg:
    description:
      I2C device address.
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  "#interrupt-cells":
    const: 2
    description:
      The first cell is the IRQ number, the second cell is the trigger type.

  gpio-controller: true

  "#gpio-cells":
    const: 2
    description:
      The first cell is the pin number and the second cell is used to specify
      the gpio active state.

  gpio-line-names:
    maxItems: 1
    description:
      Single string containing the name of the GPIO line.

  regulators:
    $ref: ../regulator/max77650-regulator.yaml

  charger:
    $ref: ../power/supply/max77650-charger.yaml

  leds:
    $ref: ../leds/leds-max77650.yaml

  onkey:
    $ref: ../input/max77650-onkey.yaml

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

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/input/linux-event-codes.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        pmic@48 {
            compatible = "maxim,max77650";
            reg = <0x48>;

            interrupt-controller;
            interrupt-parent = <&gpio2>;
            #interrupt-cells = <2>;
            interrupts = <3 IRQ_TYPE_LEVEL_LOW>;

            gpio-controller;
            #gpio-cells = <2>;
            gpio-line-names = "max77650-charger";

            regulators {
                compatible = "maxim,max77650-regulator";

                max77650_ldo: regulator-ldo {
                    regulator-name = "max77650-ldo";
                    regulator-min-microvolt = <1350000>;
                    regulator-max-microvolt = <2937500>;
                };

                max77650_sbb0: regulator-sbb0 {
                    regulator-name = "max77650-sbb0";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1587500>;
                };
            };

            charger {
                compatible = "maxim,max77650-charger";
                input-voltage-min-microvolt = <4200000>;
                input-current-limit-microamp = <285000>;
            };

            leds {
                compatible = "maxim,max77650-led";
                #address-cells = <1>;
                #size-cells = <0>;

                led@0 {
                    reg = <0>;
                    label = "blue:usr0";
                };

                led@1 {
                    reg = <1>;
                    label = "red:usr1";
                    linux,default-trigger = "heartbeat";
                };

                led@2 {
                    reg = <2>;
                    label = "green:usr2";
                };
            };

            onkey {
                compatible = "maxim,max77650-onkey";
                linux,code = <KEY_END>;
                maxim,onkey-slide;
            };
        };
    };


code:
* Maxim max8925 Power Management IC

Required parent device properties:
- compatible : "maxim,max8925"
- reg : the I2C slave address for the max8925 chip
- interrupts : IRQ line for the max8925 chip
- interrupt-controller: describes the max8925 as an interrupt
  controller (has its own domain)
- #interrupt-cells : should be 1.
	- The cell is the max8925 local IRQ number

Optional parent device properties:
- maxim,tsc-irq: there are 2 IRQ lines for max8925, one is indicated in
  interrupts property, the other is indicated here.

max8925 consists of a large and varied group of sub-devices:

Device			 Supply Names	 Description
------			 ------------	 -----------
max8925-onkey		:		: On key
max8925-rtc		:		: RTC
max8925-regulator	:		: Regulators
max8925-backlight	:		: Backlight
max8925-touch		:		: Touchscreen
max8925-power		:		: Charger

Example:

	pmic: max8925@3c {
		compatible = "maxim,max8925";
		reg = <0x3c>;
		interrupts = <1>;
		interrupt-parent = <&intcmux4>;
		interrupt-controller;
		#interrupt-cells = <1>;
		maxim,tsc-irq = <0>;

		regulators {
			SDV1 {
				regulator-min-microvolt = <637500>;
				regulator-max-microvolt = <1425000>;
				regulator-boot-on;
				regulator-always-on;
			};

			LDO1 {
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <3900000>;
				regulator-boot-on;
				regulator-always-on;
			};

		};
		backlight {
			maxim,max8925-dual-string = <0>;
		};
		charger {
			batt-detect = <0>;
			topoff-threshold = <1>;
			fast-charge = <7>;
			no-temp-support = <0>;
			no-insert-detect = <0>;
		};
	};


code:
* Maxim MAX8998, National/TI LP3974 multi-function device

The Maxim MAX8998 is a multi-function device which includes voltage/current
regulators, real time clock, battery charging controller and several
other sub-blocks. It is interfaced using an I2C interface. Each sub-block
is addressed by the host system using different i2c slave address.

PMIC sub-block
--------------

The PMIC sub-block contains a number of voltage and current regulators,
with controllable parameters and dynamic voltage scaling capability.
In addition, it includes a real time clock and battery charging controller
as well. It is accessible at I2C address 0x66.

Required properties:
- compatible: Should be one of the following:
    - "maxim,max8998" for Maxim MAX8998
    - "national,lp3974" or "ti,lp3974" for National/TI LP3974.
- reg: Specifies the i2c slave address of the pmic block. It should be 0x66.

Optional properties:
- interrupts: Interrupt specifiers for two interrupt sources.
  - First interrupt specifier is for main interrupt.
  - Second interrupt specifier is for power-on/-off interrupt.
- max8998,pmic-buck1-dvs-gpios: GPIO specifiers for two host gpios used
  for buck 1 dvs. The format of the gpio specifier depends on the gpio
  controller.
- max8998,pmic-buck2-dvs-gpio: GPIO specifier for host gpio used
  for buck 2 dvs. The format of the gpio specifier depends on the gpio
  controller.
- max8998,pmic-buck1-default-dvs-idx: Default voltage setting selected from
  the possible 4 options selectable by the dvs gpios. The value of this
  property should be 0, 1, 2 or 3. If not specified or out of range,
  a default value of 0 is taken.
- max8998,pmic-buck2-default-dvs-idx: Default voltage setting selected from
  the possible 2 options selectable by the dvs gpios. The value of this
  property should be 0 or 1. If not specified or out of range, a default
  value of 0 is taken.
- max8998,pmic-buck-voltage-lock: If present, disallows changing of
  preprogrammed buck dvfs voltages.

Additional properties required if max8998,pmic-buck1-dvs-gpios is defined:
- max8998,pmic-buck1-dvs-voltage: An array of 4 voltage values in microvolts
  for buck1 regulator that can be selected using dvs gpio.

Additional properties required if max8998,pmic-buck2-dvs-gpio is defined:
- max8998,pmic-buck2-dvs-voltage: An array of 2 voltage values in microvolts
  for buck2 regulator that can be selected using dvs gpio.

Regulators: All the regulators of MAX8998 to be instantiated shall be
listed in a child node named 'regulators'. Each regulator is represented
by a child node of the 'regulators' node.

	regulator-name {
		/* standard regulator bindings here */
	};

Following regulators of the MAX8998 PMIC block are supported. Note that
the 'n' in regulator name, as in LDOn or BUCKn, represents the LDO or BUCK
number as described in MAX8998 datasheet.

	- LDOn
		  - valid values for n are 2 to 17
		  - Example: LDO2, LDO10, LDO17
	- BUCKn
		  - valid values for n are 1 to 4.
		  - Example: BUCK1, BUCK2, BUCK3, BUCK4

	- ENVICHG: Battery Charging Current Monitor Output. This is a fixed
		   voltage type regulator

	- ESAFEOUT1: (ldo19)
	- ESAFEOUT2: (ld020)

	- CHARGER: main battery charger current control

Standard regulator bindings are used inside regulator subnodes. Check
  Documentation/devicetree/bindings/regulator/regulator.txt
for more details.

Example:

	pmic@66 {
		compatible = "maxim,max8998-pmic";
		reg = <0x66>;
		interrupt-parent = <&wakeup_eint>;
		interrupts = <4 0>, <3 0>;

		/* Buck 1 DVS settings */
		max8998,pmic-buck1-default-dvs-idx = <0>;
		max8998,pmic-buck1-dvs-gpios = <&gpx0 0 1 0 0>, /* SET1 */
					       <&gpx0 1 1 0 0>; /* SET2 */
		max8998,pmic-buck1-dvs-voltage = <1350000>, <1300000>,
						 <1000000>, <950000>;

		/* Buck 2 DVS settings */
		max8998,pmic-buck2-default-dvs-idx = <0>;
		max8998,pmic-buck2-dvs-gpio = <&gpx0 0 3 0 0>; /* SET3 */
		max8998,pmic-buck2-dvs-voltage = <1350000>, <1300000>;

		/* Regulators to instantiate */
		regulators {
			ldo2_reg: LDO2 {
				regulator-name = "VDD_ALIVE_1.1V";
				regulator-min-microvolt = <1100000>;
				regulator-max-microvolt = <1100000>;
				regulator-always-on;
			};

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

			charger_reg: CHARGER {
				regulator-name = "CHARGER";
				regulator-min-microamp = <90000>;
				regulator-max-microamp = <800000>;
			};
		};
	};


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

title: Maxim MAX14577/MAX77836 MicroUSB and Companion Power Management IC

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

description: |
  This is a part of device tree bindings for Maxim MAX14577/MAX77836 MicroUSB
  Integrated Circuit (MUIC).

  The Maxim MAX14577 is a MicroUSB and Companion Power Management IC which
  includes voltage safeout regulators, charger and MicroUSB management IC.

  The Maxim MAX77836 is a MicroUSB and Companion Power Management IC which
  includes voltage safeout and LDO regulators, charger, fuel-gauge and MicroUSB
  management IC.

properties:
  compatible:
    enum:
      - maxim,max14577
      - maxim,max77836

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  wakeup-source: true

  charger:
    $ref: /schemas/power/supply/maxim,max14577.yaml

  extcon:
    type: object
    additionalProperties: false
    properties:
      compatible:
        enum:
          - maxim,max14577-muic
          - maxim,max77836-muic

    required:
      - compatible

  regulators:
    $ref: /schemas/regulator/maxim,max14577.yaml

required:
  - compatible
  - interrupts
  - reg
  - charger

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: maxim,max14577
    then:
      properties:
        charger:
          properties:
            compatible:
              const: maxim,max14577-charger
        extcon:
          properties:
            compatible:
              const: maxim,max14577-muic
        regulator:
          properties:
            compatible:
              const: maxim,max14577-regulator
    else:
      properties:
        charger:
          properties:
            compatible:
              const: maxim,max77836-charger
        extcon:
          properties:
            compatible:
              const: maxim,max77836-muic
        regulator:
          properties:
            compatible:
              const: maxim,max77836-regulator

additionalProperties: false

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

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

        pmic@25 {
            compatible = "maxim,max14577";
            reg = <0x25>;
            interrupt-parent = <&gpx1>;
            interrupts = <5 IRQ_TYPE_LEVEL_LOW>;

            extcon {
                compatible = "maxim,max14577-muic";
            };

            regulators {
                compatible = "maxim,max14577-regulator";

                SAFEOUT {
                    regulator-name = "SAFEOUT";
                };

                CHARGER {
                    regulator-name = "CHARGER";
                    regulator-min-microamp = <90000>;
                    regulator-max-microamp = <950000>;
                    regulator-boot-on;
                };
            };

            charger {
                compatible = "maxim,max14577-charger";

                maxim,constant-uvolt = <4350000>;
                maxim,fast-charge-uamp = <450000>;
                maxim,eoc-uamp = <50000>;
                maxim,ovp-uvolt = <6500000>;
            };
        };
    };

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

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

        pmic@25 {
            compatible = "maxim,max77836";
            interrupt-parent = <&gpx1>;
            interrupts = <5 IRQ_TYPE_NONE>;
            reg = <0x25>;
            wakeup-source;

            extcon {
                compatible = "maxim,max77836-muic";
            };

            regulators {
                compatible = "maxim,max77836-regulator";

                SAFEOUT {
                    regulator-name = "SAFEOUT";
                };

                CHARGER {
                    regulator-name = "CHARGER";
                    regulator-min-microamp = <45000>;
                    regulator-max-microamp = <475000>;
                    regulator-boot-on;
                };

                LDO1 {
                    regulator-name = "MOT_2.7V";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <2700000>;
                };

                LDO2 {
                    regulator-name = "UNUSED_LDO2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3950000>;
                };
            };

            charger {
                compatible = "maxim,max77836-charger";

                maxim,constant-uvolt = <4350000>;
                maxim,fast-charge-uamp = <225000>;
                maxim,eoc-uamp = <7500>;
                maxim,ovp-uvolt = <6500000>;
            };
        };
    };


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

title: Maxim MAX77686 Power Management IC

maintainers:
  - Chanwoo Choi <cw00.choi@samsung.com>
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for Maxim MAX77686 Power Management
  Integrated Circuit (PMIC).

  The Maxim MAX77686 is a Power Management IC which includes voltage and
  current regulators, RTC and clock outputs.

  The MAX77686 provides three 32.768khz clock outputs that can be controlled
  (gated/ungated) over I2C.  The clock IDs are defined as preprocessor macros
  in dt-bindings/clock/maxim,max77686.h.

properties:
  compatible:
    const: maxim,max77686

  '#clock-cells':
    const: 1

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  voltage-regulators:
    $ref: ../regulator/maxim,max77686.yaml
    description:
      List of child nodes that specify the regulators.

  wakeup-source: true

required:
  - compatible
  - '#clock-cells'
  - reg

additionalProperties: false

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

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

        max77686: pmic@9 {
            compatible = "maxim,max77686";
            reg = <0x09>;

            interrupt-parent = <&gpx0>;
            interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-0 = <&max77686_irq>;
            pinctrl-names = "default";
            wakeup-source;
            #clock-cells = <1>;

            voltage-regulators {
                LDO1 {
                    regulator-name = "VALIVE_1.0V_AP";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;
                };

                LDO2 {
                    regulator-name = "VM1M2_1.2V_AP";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                // ...

                LDO22 {
                    regulator-name = "VMEM_VDD_2.8V";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                    maxim,ena-gpios = <&gpk0 2 GPIO_ACTIVE_HIGH>;
                };

                // ...

                BUCK1 {
                    regulator-name = "VDD_MIF";
                    regulator-min-microvolt = <850000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                BUCK2 {
                    regulator-name = "VDD_ARM";
                    regulator-min-microvolt = <850000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                // ...

                BUCK9 {
                    regulator-name = "CAM_ISP_CORE_1.2V";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1200000>;
                    maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>;
                };
            };
        };
    };


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

title: Maxim MAX77693 MicroUSB and Companion Power Management IC

maintainers:
  - Chanwoo Choi <cw00.choi@samsung.com>
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for Maxim MAX77693 MicroUSB
  Integrated Circuit (MUIC).

  The Maxim MAX77693 is a MicroUSB and Companion Power Management IC which
  includes voltage current regulators, charger, LED/flash, haptic motor driver
  and MicroUSB management IC.

properties:
  compatible:
    const: maxim,max77693

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  charger:
    $ref: /schemas/power/supply/maxim,max77693.yaml

  led:
    $ref: /schemas/leds/maxim,max77693.yaml

  max77693-muic:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: maxim,max77693-muic

    required:
      - compatible

  motor-driver:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: maxim,max77693-haptic

      haptic-supply:
        description: Power supply to the haptic motor

      pwms:
        maxItems: 1

    required:
      - compatible
      - haptic-supply
      - pwms

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

required:
  - compatible
  - interrupts
  - reg

additionalProperties: false

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

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

        pmic@66 {
            compatible = "maxim,max77693";
            reg = <0x66>;
            interrupt-parent = <&gpx1>;
            interrupts = <5 IRQ_TYPE_LEVEL_LOW>;

            regulators {
                ESAFEOUT1 {
                    regulator-name = "ESAFEOUT1";
                };

                ESAFEOUT2 {
                    regulator-name = "ESAFEOUT2";
                };

                CHARGER {
                    regulator-name = "CHARGER";
                    regulator-min-microamp = <60000>;
                    regulator-max-microamp = <2580000>;
                };
            };

            motor-driver {
                compatible = "maxim,max77693-haptic";
                haptic-supply = <&ldo26_reg>;
                pwms = <&pwm 0 38022 0>;
            };

            charger {
                compatible = "maxim,max77693-charger";

                maxim,constant-microvolt = <4350000>;
                maxim,min-system-microvolt = <3600000>;
                maxim,thermal-regulation-celsius = <100>;
                maxim,battery-overcurrent-microamp = <3500000>;
                maxim,charge-input-threshold-microvolt = <4300000>;
            };

            led {
                compatible = "maxim,max77693-led";
                maxim,boost-mode = <LEDS_BOOST_FIXED>;
                maxim,boost-mvout = <5000>;
                maxim,mvsys-min = <2400>;

                flash-led {
                    label = "max77693-flash";
                    function = LED_FUNCTION_FLASH;
                    color = <LED_COLOR_ID_WHITE>;
                    led-sources = <0>, <1>;
                    led-max-microamp = <500000>;
                    flash-max-microamp = <1250000>;
                    flash-max-timeout-us = <1000000>;
                };
            };
        };
    };


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

title: MAX77714 PMIC with GPIO, RTC and watchdog from Maxim Integrated.

maintainers:
  - Luca Ceresoli <luca.ceresoli@bootlin.com>

description: |
  MAX77714 is a Power Management IC with 4 buck regulators, 9
  low-dropout regulators, 8 GPIOs, RTC and watchdog.

properties:
  compatible:
    const: maxim,max77714

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  "#interrupt-cells":
    const: 2
    description:
      The first cell is the IRQ number, the second cell is the trigger type.

  regulators:
    type: object
    additionalProperties: false

    patternProperties:
      '^(buck[0-3]|ldo[0-8])$':
        type: object
        unevaluatedProperties: false
        $ref: /schemas/regulator/regulator.yaml#

required:
  - compatible
  - reg
  - interrupts
  - interrupt-controller
  - "#interrupt-cells"

additionalProperties: false

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

        pmic@1c {
            compatible = "maxim,max77714";
            reg = <0x1c>;
            interrupt-parent = <&gpio2>;
            interrupts = <3 IRQ_TYPE_LEVEL_LOW>;

            interrupt-controller;
            #interrupt-cells = <2>;
        };
    };


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

title: Maxim MAX77802 Power Management IC

maintainers:
  - Javier Martinez Canillas <javier@dowhile0.org>
  - Krzysztof Kozlowski <krzk@kernel.org>

description: |
  This is a part of device tree bindings for Maxim MAX77802 Power Management
  Integrated Circuit (PMIC).

  The Maxim MAX77802 is a Power Management IC which includes voltage and
  current regulators (10 high efficiency Buck regulators and 32 Low-DropOut
  (LDO)), RTC and clock outputs.

  The MAX77802 provides two 32.768khz clock outputs that can be controlled
  (gated/ungated) over I2C.  The clock IDs are defined as preprocessor macros
  in dt-bindings/clock/maxim,max77802.h.

properties:
  compatible:
    const: maxim,max77802

  '#clock-cells':
    const: 1

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    $ref: /schemas/regulator/maxim,max77802.yaml
    description:
      List of child nodes that specify the regulators.

  inb1-supply:
    description: Power supply for buck1
  inb2-supply:
    description: Power supply for buck2
  inb3-supply:
    description: Power supply for buck3
  inb4-supply:
    description: Power supply for buck4
  inb5-supply:
    description: Power supply for buck5
  inb6-supply:
    description: Power supply for buck6
  inb7-supply:
    description: Power supply for buck7
  inb8-supply:
    description: Power supply for buck8
  inb9-supply:
    description: Power supply for buck9
  inb10-supply:
    description: Power supply for buck10

  inl1-supply:
    description: Power supply for LDO8, LDO15
  inl2-supply:
    description: Power supply for LDO17, LDO27, LDO30, LDO35
  inl3-supply:
    description: Power supply for LDO3, LDO5, LDO7, LDO7
  inl4-supply:
    description: Power supply for LDO10, LDO11, LDO13, LDO14
  inl5-supply:
    description: Power supply for LDO9, LDO19
  inl6-supply:
    description: Power supply for LDO4, LDO21, LDO24, LDO33
  inl7-supply:
    description: Power supply for LDO18, LDO20, LDO28, LDO29
  inl9-supply:
    description: Power supply for LDO12, LDO23, LDO25, LDO26, LDO32, LDO34
  inl10-supply:
    description: Power supply for LDO1, LDO2

  wakeup-source: true

required:
  - compatible
  - '#clock-cells'
  - reg

additionalProperties: false

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

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

        pmic@9 {
            compatible = "maxim,max77802";
            interrupt-parent = <&gpx3>;
            interrupts = <1 IRQ_TYPE_NONE>;
            pinctrl-names = "default";
            pinctrl-0 = <&max77802_irq>, <&pmic_selb>,
                        <&pmic_dvs_1>, <&pmic_dvs_2>, <&pmic_dvs_3>;
            wakeup-source;
            reg = <0x9>;
            #clock-cells = <1>;

            inb1-supply = <&tps65090_dcdc2>;
            inb2-supply = <&tps65090_dcdc1>;
            inb3-supply = <&tps65090_dcdc2>;
            inb4-supply = <&tps65090_dcdc2>;
            inb5-supply = <&tps65090_dcdc1>;
            inb6-supply = <&tps65090_dcdc2>;
            inb7-supply = <&tps65090_dcdc1>;
            inb8-supply = <&tps65090_dcdc1>;
            inb9-supply = <&tps65090_dcdc1>;
            inb10-supply = <&tps65090_dcdc1>;

            inl1-supply = <&buck5_reg>;
            inl2-supply = <&buck7_reg>;
            inl3-supply = <&buck9_reg>;
            inl4-supply = <&buck9_reg>;
            inl5-supply = <&buck9_reg>;
            inl6-supply = <&tps65090_dcdc2>;
            inl7-supply = <&buck9_reg>;
            inl9-supply = <&tps65090_dcdc2>;
            inl10-supply = <&buck7_reg>;

            regulators {
                BUCK1 {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-ramp-delay = <12500>;
                    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-ramp-delay = <12500>;
                    regulator-coupled-with = <&buck3_reg>;
                    regulator-coupled-max-spread = <300000>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ...

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

                LDO1 {
                    regulator-name = "vdd_1v0";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;
                    regulator-initial-mode = <MAX77802_OPMODE_NORMAL>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-mode = <MAX77802_OPMODE_LP>;
                    };
                };

                // ...

                LDO35 {
                    regulator-name = "ldo_35";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <1200000>;
                };
            };
        };
    };


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

title: Maxim MAX77843 MicroUSB and Companion Power Management IC

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

description: |
  This is a part of device tree bindings for Maxim MAX77843 MicroUSB
  Integrated Circuit (MUIC).

  The Maxim MAX77843 is a MicroUSB and Companion Power Management IC which
  includes voltage current regulators, charger, fuel-gauge, haptic motor driver
  and MicroUSB management IC.

properties:
  compatible:
    const: maxim,max77843

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  extcon:
    $ref: /schemas/extcon/maxim,max77843.yaml

  motor-driver:
    type: object
    additionalProperties: false
    properties:
      compatible:
        const: maxim,max77843-haptic

      haptic-supply:
        description: Power supply to the haptic motor

      pwms:
        maxItems: 1

    required:
      - compatible
      - haptic-supply
      - pwms

  regulators:
    $ref: /schemas/regulator/maxim,max77843.yaml

required:
  - compatible
  - interrupts
  - reg

additionalProperties: false

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

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

        pmic@66 {
            compatible = "maxim,max77843";
            interrupt-parent = <&gpa1>;
            interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
            reg = <0x66>;

            extcon {
                compatible = "maxim,max77843-muic";

                connector {
                    compatible = "samsung,usb-connector-11pin",
                                 "usb-b-connector";
                    label = "micro-USB";
                    type = "micro";

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

                        port@0 {
                            /*
                             * TODO: The DTS this is based on does not have
                             * port@0 which is a required property. The ports
                             * look incomplete and need fixing.
                             * Add a disabled port just to satisfy dtschema.
                             */
                            reg = <0>;
                            status = "disabled";
                        };

                        port@3 {
                            reg = <3>;
                            endpoint {
                                remote-endpoint = <&mhl_to_musb_con>;
                            };
                        };
                    };
                };

                ports {
                    port {
                        endpoint {
                            remote-endpoint = <&usb_to_muic>;
                        };
                    };
                };
            };

            regulators {
                compatible = "maxim,max77843-regulator";

                SAFEOUT1 {
                    regulator-name = "SAFEOUT1";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <4950000>;
                };

                SAFEOUT2 {
                    regulator-name = "SAFEOUT2";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <4950000>;
                };

                CHARGER {
                    regulator-name = "CHARGER";
                    regulator-min-microamp = <100000>;
                    regulator-max-microamp = <3150000>;
                };
            };

            motor-driver {
                compatible = "maxim,max77843-haptic";
                haptic-supply = <&ldo38_reg>;
                pwms = <&pwm 0 33670 0>;
            };
        };
    };


code:
* Freescale MC13783/MC13892 Power Management Integrated Circuit (PMIC)

Required properties:
- compatible : Should be "fsl,mc13783" or "fsl,mc13892"

Optional properties:
- fsl,mc13xxx-uses-adc : Indicate the ADC is being used
- fsl,mc13xxx-uses-codec : Indicate the Audio Codec is being used
- fsl,mc13xxx-uses-rtc : Indicate the RTC is being used
- fsl,mc13xxx-uses-touch : Indicate the touchscreen controller is being used

Sub-nodes:
- codec: Contain the Audio Codec node.
  - adc-port: Contain PMIC SSI port number used for ADC.
  - dac-port: Contain PMIC SSI port number used for DAC.
- leds : Contain the led nodes and initial register values in property
  "led-control". Number of register depends of used IC, for MC13783 is 6,
  for MC13892 is 4, for MC34708 is 1. See datasheet for bits definitions of
  these registers.
  - #address-cells: Must be 1.
  - #size-cells: Must be 0.
  Each led node should contain "reg", which used as LED ID (described below).
  Optional properties "label" and "linux,default-trigger" is described in
  Documentation/devicetree/bindings/leds/common.txt.
- regulators : Contain the regulator nodes. The regulators are bound using
  their names as listed below with their registers and bits for enabling.

MC13783 LED IDs:
    0  : Main display
    1  : AUX display
    2  : Keypad
    3  : Red 1
    4  : Green 1
    5  : Blue 1
    6  : Red 2
    7  : Green 2
    8  : Blue 2
    9  : Red 3
    10 : Green 3
    11 : Blue 3

MC13892 LED IDs:
    0  : Main display
    1  : AUX display
    2  : Keypad
    3  : Red
    4  : Green
    5  : Blue

MC34708 LED IDs:
    0  : Charger Red
    1  : Charger Green

MC13783 regulators:
    sw1a      : regulator SW1A      (register 24, bit 0)
    sw1b      : regulator SW1B      (register 25, bit 0)
    sw2a      : regulator SW2A      (register 26, bit 0)
    sw2b      : regulator SW2B      (register 27, bit 0)
    sw3       : regulator SW3       (register 29, bit 20)
    vaudio    : regulator VAUDIO    (register 32, bit 0)
    viohi     : regulator VIOHI     (register 32, bit 3)
    violo     : regulator VIOLO     (register 32, bit 6)
    vdig      : regulator VDIG      (register 32, bit 9)
    vgen      : regulator VGEN      (register 32, bit 12)
    vrfdig    : regulator VRFDIG    (register 32, bit 15)
    vrfref    : regulator VRFREF    (register 32, bit 18)
    vrfcp     : regulator VRFCP     (register 32, bit 21)
    vsim      : regulator VSIM      (register 33, bit 0)
    vesim     : regulator VESIM     (register 33, bit 3)
    vcam      : regulator VCAM      (register 33, bit 6)
    vrfbg     : regulator VRFBG     (register 33, bit 9)
    vvib      : regulator VVIB      (register 33, bit 11)
    vrf1      : regulator VRF1      (register 33, bit 12)
    vrf2      : regulator VRF2      (register 33, bit 15)
    vmmc1     : regulator VMMC1     (register 33, bit 18)
    vmmc2     : regulator VMMC2     (register 33, bit 21)
    gpo1      : regulator GPO1      (register 34, bit 6)
    gpo2      : regulator GPO2      (register 34, bit 8)
    gpo3      : regulator GPO3      (register 34, bit 10)
    gpo4      : regulator GPO4      (register 34, bit 12)
    pwgt1spi  : regulator PWGT1SPI  (register 34, bit 15)
    pwgt2spi  : regulator PWGT2SPI  (register 34, bit 16)

MC13892 regulators:
    vcoincell : regulator VCOINCELL (register 13, bit 23)
    sw1       : regulator SW1	    (register 24, bit 0)
    sw2       : regulator SW2	    (register 25, bit 0)
    sw3       : regulator SW3	    (register 26, bit 0)
    sw4       : regulator SW4	    (register 27, bit 0)
    swbst     : regulator SWBST	    (register 29, bit 20)
    vgen1     : regulator VGEN1	    (register 32, bit 0)
    viohi     : regulator VIOHI	    (register 32, bit 3)
    vdig      : regulator VDIG	    (register 32, bit 9)
    vgen2     : regulator VGEN2	    (register 32, bit 12)
    vpll      : regulator VPLL	    (register 32, bit 15)
    vusb2     : regulator VUSB2	    (register 32, bit 18)
    vgen3     : regulator VGEN3	    (register 33, bit 0)
    vcam      : regulator VCAM	    (register 33, bit 6)
    vvideo    : regulator VVIDEO    (register 33, bit 12)
    vaudio    : regulator VAUDIO    (register 33, bit 15)
    vsd       : regulator VSD	    (register 33, bit 18)
    gpo1      : regulator GPO1	    (register 34, bit 6)
    gpo2      : regulator GPO2	    (register 34, bit 8)
    gpo3      : regulator GPO3	    (register 34, bit 10)
    gpo4      : regulator GPO4	    (register 34, bit 12)
    pwgt1spi  : regulator PWGT1SPI  (register 34, bit 15)
    pwgt2spi  : regulator PWGT2SPI  (register 34, bit 16)
    vusb      : regulator VUSB	    (register 50, bit 3)

  The bindings details of individual regulator device can be found in:
  Documentation/devicetree/bindings/regulator/regulator.txt

Examples:

ecspi@70010000 { /* ECSPI1 */
	cs-gpios = <&gpio4 24 0>, /* GPIO4_24 */
		   <&gpio4 25 0>; /* GPIO4_25 */

	pmic: mc13892@0 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "fsl,mc13892";
		spi-max-frequency = <6000000>;
		reg = <0>;
		interrupt-parent = <&gpio0>;
		interrupts = <8>;

		leds {
			#address-cells = <1>;
			#size-cells = <0>;
			led-control = <0x000 0x000 0x0e0 0x000>;

			sysled@3 {
				reg = <3>;
				label = "system:red:live";
				linux,default-trigger = "heartbeat";
			};
		};

		regulators {
			sw1_reg: mc13892__sw1 {
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1375000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw2_reg: mc13892__sw2 {
				regulator-min-microvolt = <900000>;
				regulator-max-microvolt = <1850000>;
				regulator-boot-on;
				regulator-always-on;
			};
		};
	};
};