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

title: TI LP5812 4x3 Matrix RGB LED Driver with Autonomous Control

maintainers:
  - Nam Tran <trannamatk@gmail.com>

description: |
  The LP5812 is a 4x3 matrix RGB LED driver with I2C interface
  and autonomous animation engine control.
  For more product information please see the link below:
  https://www.ti.com/product/LP5812#tech-docs

properties:
  compatible:
    const: ti,lp5812

  reg:
    maxItems: 1

  ti,scan-mode:
    description: |
      Selects the LED scan mode of the LP5812. The device supports
      three modes:
        - Direct-drive mode (by default if 'ti,scan-mode' is omitted)
        drives up to 4 LEDs directly by internal current sinks (LED0-LED3).
        - TCM-drive mode ("tcm:<n>:<order...>") drives up to 12 LEDs
        (4 RGB) using 1-4 scan multiplexing. The <n> specifies the number
        of scans (1-4), and <order...> defines the scan order of the outputs.
        - Mix-drive mode ("mix:<n>:<direct>:<order...>") combines
        direct-drive and TCM-drive outputs. The <n> specifies the number
        of scans, <direct> selects the direct-drive outputs, and <order...>
        defines the scan order.
    $ref: /schemas/types.yaml#/definitions/string
    pattern: '^(tcm|mix):[1-4](:[0-3]){1,4}$'

  vcc-supply:
    description: Regulator providing power to the 'VCC' pin.

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

patternProperties:
  "^led@[0-3]$":
    type: object
    $ref: common.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        minimum: 0
        maximum: 3

    required:
      - reg

  "^multi-led@[4-7]$":
    type: object
    $ref: leds-class-multicolor.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        minimum: 4
        maximum: 7

      "#address-cells":
        const: 1

      "#size-cells":
        const: 0

    patternProperties:
      "^led@[4-9a-f]$":
        type: object
        $ref: common.yaml#
        unevaluatedProperties: false

        properties:
          reg:
            minimum: 4
            maximum: 15

        required:
          - reg

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    #include <dt-bindings/leds/common.h>

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

        led-controller@1b {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "ti,lp5812";
            reg = <0x1b>;
            ti,scan-mode = "tcm:4:0:1:2:3";
            vcc-supply = <&vdd_3v3_reg>;

            led@0 {
                reg = <0x0>;
                label = "LED0";
                led-max-microamp = <25500>;
            };

            led@1 {
                reg = <0x1>;
                label = "LED1";
                led-max-microamp = <25500>;
            };

            led@2 {
                reg = <0x2>;
                label = "LED2";
                led-max-microamp = <25500>;
            };

            led@3 {
                reg = <0x3>;
                label = "LED3";
                led-max-microamp = <25500>;
            };

            multi-led@4 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0x4>;
                color = <LED_COLOR_ID_RGB>;
                label = "LED_A";

                led@4 {
                    reg = <0x4>;
                    color = <LED_COLOR_ID_GREEN>;
                    led-max-microamp = <25500>;
                };

                led@5 {
                    reg = <0x5>;
                    color = <LED_COLOR_ID_RED>;
                    led-max-microamp = <25500>;
                };

                led@6 {
                    reg = <0x6>;
                    color = <LED_COLOR_ID_BLUE>;
                    led-max-microamp = <25500>;
                };
            };

            multi-led@5 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0x5>;
                color = <LED_COLOR_ID_RGB>;
                label = "LED_B";

                led@7 {
                    reg = <0x7>;
                    color = <LED_COLOR_ID_GREEN>;
                    led-max-microamp = <25500>;
                };

                led@8 {
                    reg = <0x8>;
                    color = <LED_COLOR_ID_RED>;
                    led-max-microamp = <25500>;
                };

                led@9 {
                    reg = <0x9>;
                    color = <LED_COLOR_ID_BLUE>;
                    led-max-microamp = <25500>;
                };
            };

            multi-led@6 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0x6>;
                color = <LED_COLOR_ID_RGB>;
                label = "LED_C";

                led@a {
                    reg = <0xa>;
                    color = <LED_COLOR_ID_GREEN>;
                    led-max-microamp = <25500>;
                };

                led@b {
                    reg = <0xb>;
                    color = <LED_COLOR_ID_RED>;
                    led-max-microamp = <25500>;
                };

                led@c {
                    reg = <0xc>;
                    color = <LED_COLOR_ID_BLUE>;
                    led-max-microamp = <25500>;
                };
            };

            multi-led@7 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0x7>;
                color = <LED_COLOR_ID_RGB>;
                label = "LED_D";

                led@d {
                    reg = <0xd>;
                    color = <LED_COLOR_ID_GREEN>;
                    led-max-microamp = <25500>;
                };

                led@e {
                    reg = <0xe>;
                    color = <LED_COLOR_ID_RED>;
                    led-max-microamp = <25500>;
                };

                led@f {
                    reg = <0xf>;
                    color = <LED_COLOR_ID_BLUE>;
                    led-max-microamp = <25500>;
                };
            };
        };
    };

...
