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

title: RK809 Power Management Integrated Circuit

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

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

properties:
  compatible:
    enum:
      - rockchip,rk809

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

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

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

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

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

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

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

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

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

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

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

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

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

  vcc9-supply:
    description:
      The input supply for DCDC_REG5 and SWITCH_REG2.

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

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

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

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

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

additionalProperties: false

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

        rk808: pmic@1b {
            compatible = "rockchip,rk808";
            reg = <0x1b>;
            #clock-cells = <1>;
            clock-output-names = "xin32k", "rk808-clkout2";
            interrupt-parent = <&gpio3>;
            interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&pmic_int_l_pin>;
            rockchip,system-power-controller;
            wakeup-source;

            vcc1-supply = <&vcc_sysin>;
            vcc2-supply = <&vcc_sysin>;
            vcc3-supply = <&vcc_sysin>;
            vcc4-supply = <&vcc_sysin>;
            vcc6-supply = <&vcc_sysin>;
            vcc7-supply = <&vcc_sysin>;
            vcc8-supply = <&vcc3v3_sys>;
            vcc9-supply = <&vcc_sysin>;
            vcc10-supply = <&vcc_sysin>;
            vcc11-supply = <&vcc_sysin>;
            vcc12-supply = <&vcc3v3_sys>;

            regulators {
                vdd_center: DCDC_REG1 {
                    regulator-name = "vdd_center";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-ramp-delay = <6001>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                vdd_cpu_l: DCDC_REG2 {
                    regulator-name = "vdd_cpu_l";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-ramp-delay = <6001>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

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

                vcc_1v8: vcc_wl: DCDC_REG4 {
                    regulator-name = "vcc_1v8";
                    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>;
                    };
                };

                vcc1v8_pmupll: LDO_REG3 {
                    regulator-name = "vcc1v8_pmupll";
                    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>;
                    };
                };

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

                vcca3v0_codec: LDO_REG5 {
                    regulator-name = "vcca3v0_codec";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3000000>;
                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

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

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

                vcc_3v0: LDO_REG8 {
                    regulator-name = "vcc_3v0";
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3000000>;
                    regulator-max-microvolt = <3000000>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-microvolt = <3000000>;
                    };
                };

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

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