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

title: RK801 Power Management Integrated Circuit

maintainers:
  - Joseph Chen <chenjh@rock-chips.com>

description: |
  Rockchip RK801 series PMIC. This device consists of an i2c controlled MFD
  that includes multiple switchable regulators.

properties:
  compatible:
    enum:
      - rockchip,rk801

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

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

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

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

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

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

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

  vcc5-supply:
    description:
      The input supply for ldo1.

  vcc6-supply:
    description:
      The input supply for ldo2.

  vcc7-supply:
    description:
      The input supply for switch.

  regulators:
    type: object
    patternProperties:
      "^(dcdc[1-4]|ldo[1-2]|switch)$":
        type: object
        $ref: /schemas/regulator/regulator.yaml#
        unevaluatedProperties: false
    additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

additionalProperties: false

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

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

        rk801: pmic@27 {
            compatible = "rockchip,rk801";
            reg = <0x27>;
            interrupt-parent = <&gpio0>;
            interrupts = <RK_PC0 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&pmic_int_l>;
            system-power-controller;
            wakeup-source;

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

            regulators {
                vdd_cpu: dcdc1 {
                    regulator-name = "vdd_cpu";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-initial-mode = <0x1>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-mode = <0x2>;
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <950000>;
                    };
                };

                vcc3v3_sys: dcdc2 {
                    regulator-name = "vcc3v3_sys";
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-initial-mode = <0x1>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-mode = <0x2>;
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };

                vcc_ddr: dcdc3 {
                    regulator-name = "vcc_ddr";
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-mode = <0x2>;
                        regulator-on-in-suspend;
                    };
                };

                vdd_logic: dcdc4 {
                    regulator-name = "vdd_logic";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-initial-mode = <0x1>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-mode = <0x2>;
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <900000>;
                    };
                };

                vdd0v9_sys: ldo1 {
                    regulator-name = "vdd0v9_sys";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <900000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <900000>;
                    };
                };

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

                vcc_3v3: switch {
                    regulator-name = "vcc_3v3";
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                        regulator-suspend-microvolt = <3300000>;
                    };
                };
            };
        };
    };
