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

title: Freescale MC13xxx Power Management Integrated Circuits (PMIC)

maintainers:
  - Alexander Kurz <akurz@blala.de>

description: >
  The MC13xxx PMIC series consists of the three models MC13783, MC13892
  and MC34708 and provide regulators and other features like RTC, ADC,
  LED, touchscreen, codec and input buttons.

  Link to datasheets
    https://www.nxp.com/docs/en/data-sheet/MC13783.pdf
    https://www.nxp.com/docs/en/data-sheet/MC13892.pdf
    https://www.nxp.com/docs/en/data-sheet/MC34708.pdf

properties:
  compatible:
    enum:
      - fsl,mc13783
      - fsl,mc13892
      - fsl,mc34708

  reg:
    description: I2C slave address or SPI chip select number.
    maxItems: 1

  spi-max-frequency: true

  spi-cs-high: true

  system-power-controller: true

  interrupts:
    maxItems: 1

  buttons:
    type: object
    properties:
      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

    patternProperties:
      "^onkey@[0-2]$":
        $ref: /schemas/input/input.yaml#
        unevaluatedProperties: false
        type: object

        properties:
          reg:
            description: |
              One of
              MC13783 BUTTON IDs:
                0: ONOFD1
                1: ONOFD2
                2: ONOFD3

              MC13892 BUTTON IDs:
                0: PWRON1
                1: PWRON2
                2: PWRON3

              MC34708 BUTTON IDs:
                0: PWRON1
                1: PWRON2
            maximum: 2

          debounce-delay-ms:
            enum: [0, 30, 150, 750]
            default: 30
            description:
              Sets the debouncing delay in milliseconds.

          active-low:
            description: Set active when pin is pulled low.

          linux,code: true

          fsl,enable-reset:
            description:
              Setting of the global reset option.
            type: boolean

    unevaluatedProperties: false

  leds:
    type: object
    $ref: /schemas/leds/common.yaml#

    properties:
      reg:
        description: |
          One of
          MC13783 LED IDs
            0: Main display
            1: AUX display
            2: Keypad
            3: Red 1
            4: Green 1
            5: Blue 1
            6: Red 2
            7: Green 2
            8: Blue 2
            9: Red 3
            10: Green 3
            11: Blue 3

          MC13892 LED IDs
            0: Main display
            1: AUX display
            2: Keypad
            3: Red
            4: Green
            5: Blue

          MC34708 LED IDs
            0: Charger Red
            1: Charger Green
        maxItems: 1

      led-control:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        description: |
          Setting for LED-Control register array length depends on model,
          mc13783: 6, mc13892: 4, mc34708: 1

  regulators:
    type: object

    additionalProperties:
      type: object

    description: |
      List of child nodes specifying the regulators, depending on chip variant.
      Each child node is defined using the standard binding for regulators and
      the optional regulator properties defined below.

  fsl,mc13xxx-uses-adc:
    type: boolean
    description: Indicate the ADC is being used

  fsl,mc13xxx-uses-codec:
    type: boolean
    description: Indicate the Audio Codec is being used

  fsl,mc13xxx-uses-rtc:
    type: boolean
    description: Indicate the RTC is being used

  fsl,mc13xxx-uses-touch:
    type: boolean
    description: Indicate the touchscreen controller is being used

required:
  - compatible
  - reg

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: fsl,mc13783
    then:
      properties:
        leds:
          properties:
            led-control:
              minItems: 6
              maxItems: 6
        regulators:
          patternProperties:
            "^gpo[1-4]|pwgt[12]spi|sw[12][ab]|sw3|vaudio|vcam|vdig|vesim|vgen|viohi|violo|vmmc[12]|vrf[12]|vrfbg|vrfcp|vrfdig|vrfref|vsim|vvib$":
              type: object
              $ref: /schemas/regulator/regulator.yaml#

              unevaluatedProperties: false

  - if:
      properties:
        compatible:
          contains:
            const: fsl,mc13892
    then:
      properties:
        leds:
          properties:
            led-control:
              minItems: 4
              maxItems: 4
        regulators:
          patternProperties:
            "^gpo[1-4]|pwgt[12]spi|sw[1-4]|swbst|vaudio|vcam|vcoincell|vdig|vgen[1-3]|viohi|vpll|vsd|vusb|vusb2|vvideo$":
              type: object
              $ref: /schemas/regulator/regulator.yaml#

              unevaluatedProperties: false

  - if:
      properties:
        compatible:
          contains:
            const: fsl,mc34708
    then:
      properties:
        buttons:
          patternProperties:
            "^onkey@[0-2]$":
              properties:
                reg:
                  maximum: 1
        leds:
          properties:
            led-control:
              minItems: 1
              maxItems: 1

additionalProperties: false

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

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

        pmic: mc13892@0 {
            compatible = "fsl,mc13892";
            reg = <0>;
            spi-max-frequency = <1000000>;
            spi-cs-high;
            interrupt-parent = <&gpio0>;
            interrupts = <8 IRQ_TYPE_LEVEL_HIGH>;
            fsl,mc13xxx-uses-rtc;
            fsl,mc13xxx-uses-adc;

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

                onkey@0 {
                    reg = <0>;
                    debounce-delay-ms = <30>;
                    active-low;
                    fsl,enable-reset;
                };
            };

            leds {
                #address-cells = <1>;
                #size-cells = <0>;
                led-control = <0x000 0x000 0x0e0 0x000>;

                sysled@3 {
                    reg = <3>;
                    label = "system:red:live";
                    linux,default-trigger = "heartbeat";
                };
            };

            regulators {
                sw1_reg: sw1 {
                    regulator-min-microvolt = <600000>;
                    regulator-max-microvolt = <1375000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                sw2_reg: sw2 {
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1850000>;
                    regulator-boot-on;
                    regulator-always-on;
                };
            };
        };
    };
