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

title: RK818 Power Management Integrated Circuit

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

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

properties:
  compatible:
    enum:
      - rockchip,rk818

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

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

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

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

  system-power-controller: true

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

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

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

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

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

  boost-supply:
    description:
      The input supply for DCDC_BOOST

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

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

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

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

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

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

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

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

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

additionalProperties: false

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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