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

title: RK808 Power Management Integrated Circuit

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

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

properties:
  compatible:
    enum:
      - rockchip,rk808

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

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

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

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

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

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

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

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

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

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

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

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

  vcc9-supply:
    description:
      The input supply for LDO_REG4 and LDO_REG5.

  vcc10-supply:
    description:
      The input supply for LDO_REG6.

  vcc11-supply:
    description:
      The input supply for LDO_REG8.

  vcc12-supply:
    description:
      The input supply for SWITCH_REG2.

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

  dvs-gpios:
    description: |
      buck1/2 can be controlled by gpio dvs, this is GPIO specifiers for
      2 host gpio's used for dvs. The format of the gpio specifier
      depends in the gpio controller. If DVS GPIOs aren't present,
      voltage changes will happen very quickly with no slow ramp time.
    maxItems: 2

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

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";
            clock-output-names = "xin32k", "rk808-clkout2";
            interrupt-parent = <&gpio0>;
            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&pmic_int &dvs_1 &dvs_2>;
            dvs-gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>,
                <&gpio7 15 GPIO_ACTIVE_HIGH>;
            reg = <0x1b>;
            rockchip,system-power-controller;
            wakeup-source;
            #clock-cells = <1>;

            vcc8-supply = <&vcc_18>;
            vcc9-supply = <&vcc_io>;
            vcc10-supply = <&vcc_io>;
            vcc12-supply = <&vcc_io>;
            vddio-supply = <&vccio_pmu>;

            regulators {
                vdd_cpu: DCDC_REG1 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-name = "vdd_arm";
                };

                vdd_gpu: DCDC_REG2 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <850000>;
                    regulator-max-microvolt = <1250000>;
                    regulator-name = "vdd_gpu";
                };

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

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

                vccio_pmu: LDO_REG1 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-name = "vccio_pmu";
                };

                vcc_tp: LDO_REG2 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-name = "vcc_tp";
                };

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

                vcc18_lcd: LDO_REG4 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-name = "vcc18_lcd";
                };

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

                vdd10_lcd: LDO_REG6 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-name = "vdd10_lcd";
                };

                vcc_18: LDO_REG7 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                    regulator-name = "vcc_18";
                };

                vcca_codec: LDO_REG8 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-min-microvolt = <3300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-name = "vcca_codec";
                };

                vcc_wl: SWITCH_REG1 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-name = "vcc_wl";
                };

                vcc_lcd: SWITCH_REG2 {
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-name = "vcc_lcd";
                };
            };
        };
    };