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

title: MT6360 PMIC from MediaTek Integrated

maintainers:
  - Gene Chen <gene_chen@richtek.com>

description: |
  MT6360 is a PMIC device with the following sub modules.
  It is interfaced to host controller using I2C interface.

  This document describes the binding for PMIC device and its sub module.

properties:
  compatible:
    const: mediatek,mt6360

  reg:
    maxItems: 1

  wakeup-source: true

  interrupts:
    maxItems: 1

  interrupt-names:
    const: IRQB

  interrupt-controller: true

  "#interrupt-cells":
    const: 1
    description:
      The first cell is the IRQ number.

  regulators:
    $ref: /schemas/regulator/mt6360-regulator.yaml#

  charger:
    $ref: /schemas/power/supply/mt6360_charger.yaml#

  tcpc:
    $ref: /schemas/usb/mediatek,mt6360-tcpc.yaml#

  led-controller:
    $ref: /schemas/leds/leds-mt6360.yaml#

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

additionalProperties:
  type: object

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/regulator/mediatek,mt6360-regulator.h>
    #include <dt-bindings/leds/common.h>
    #include <dt-bindings/usb/pd.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        pmic@34 {
            compatible = "mediatek,mt6360";
            reg = <0x34>;
            wakeup-source;
            interrupts-extended = <&gpio26 0 IRQ_TYPE_LEVEL_LOW>;
            interrupt-names = "IRQB";
            interrupt-controller;
            #interrupt-cells = <1>;

            mt6360_charger: charger {
                compatible = "mediatek,mt6360-chg";
                richtek,vinovp-microvolt = <14500000>;

                otg_vbus_regulator: usb-otg-vbus-regulator {
                    regulator-compatible = "usb-otg-vbus";
                    regulator-name = "usb-otg-vbus";
                    regulator-min-microvolt = <4425000>;
                    regulator-max-microvolt = <5825000>;
                };
            };

            led-controller {
                compatible = "mediatek,mt6360-led";
                #address-cells = <1>;
                #size-cells = <0>;

                multi-led@0 {
                    reg = <0>;
                    function = LED_FUNCTION_INDICATOR;
                    color = <LED_COLOR_ID_RGB>;
                    led-max-microamp = <24000>;
                    #address-cells = <1>;
                    #size-cells = <0>;
                    led@0 {
                        reg = <0>;
                        color = <LED_COLOR_ID_RED>;
                    };
                    led@1 {
                        reg = <1>;
                        color = <LED_COLOR_ID_GREEN>;
                    };
                    led@2 {
                        reg = <2>;
                        color = <LED_COLOR_ID_BLUE>;
                    };
                };
                led@3 {
                    reg = <3>;
                    function = LED_FUNCTION_INDICATOR;
                    color = <LED_COLOR_ID_WHITE>;
                    led-max-microamp = <150000>;
                };
                led@4 {
                    reg = <4>;
                    function = LED_FUNCTION_FLASH;
                    color = <LED_COLOR_ID_WHITE>;
                    function-enumerator = <1>;
                    led-max-microamp = <200000>;
                    flash-max-microamp = <500000>;
                    flash-max-timeout-us = <1024000>;
                };
                led@5 {
                    reg = <5>;
                    function = LED_FUNCTION_FLASH;
                    color = <LED_COLOR_ID_WHITE>;
                    function-enumerator = <2>;
                    led-max-microamp = <200000>;
                    flash-max-microamp = <500000>;
                    flash-max-timeout-us = <1024000>;
                };
            };

            regulators {
                compatible = "mediatek,mt6360-regulator";
                LDO_VIN3-supply = <&BUCK2>;
                buck1 {
                    regulator-compatible = "BUCK1";
                    regulator-name = "mt6360,buck1";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP
                         MT6360_OPMODE_ULP>;
                };
                BUCK2: buck2 {
                    regulator-compatible = "BUCK2";
                    regulator-name = "mt6360,buck2";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP
                         MT6360_OPMODE_ULP>;
                };
                ldo6 {
                    regulator-compatible = "LDO6";
                    regulator-name = "mt6360,ldo6";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2100000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
                ldo7 {
                    regulator-compatible = "LDO7";
                    regulator-name = "mt6360,ldo7";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2100000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
                ldo1 {
                    regulator-compatible = "LDO1";
                    regulator-name = "mt6360,ldo1";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <3600000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
                ldo2 {
                    regulator-compatible = "LDO2";
                    regulator-name = "mt6360,ldo2";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <3600000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
                ldo3 {
                    regulator-compatible = "LDO3";
                    regulator-name = "mt6360,ldo3";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <3600000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
                ldo5 {
                    regulator-compatible = "LDO5";
                    regulator-name = "mt6360,ldo5";
                    regulator-min-microvolt = <2700000>;
                    regulator-max-microvolt = <3600000>;
                    regulator-allowed-modes = <MT6360_OPMODE_NORMAL
                         MT6360_OPMODE_LP>;
                };
            };

            tcpc {
                compatible = "mediatek,mt6360-tcpc";
                interrupts-extended = <&gpio26 3 IRQ_TYPE_LEVEL_LOW>;
                interrupt-names = "PD_IRQB";

                connector {
                    compatible = "usb-c-connector";
                    label = "USB-C";
                    data-role = "dual";
                    power-role = "dual";
                    try-power-role = "sink";
                    source-pdos = <PDO_FIXED(5000, 1000, PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
                    sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
                    op-sink-microwatt = <10000000>;

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

                        port@0 {
                            reg = <0>;
                            endpoint {
                                remote-endpoint = <&usb_hs>;
                            };
                        };
                        port@1 {
                            reg = <1>;
                            endpoint {
                                remote-endpoint = <&usb_ss>;
                          };
                        };
                        port@2 {
                            reg = <2>;
                            endpoint {
                                remote-endpoint = <&dp_aux>;
                            };
                        };
                    };
                };
            };
        };
    };
