Commit 2fe4df9f authored by Nam Tran's avatar Nam Tran Committed by Lee Jones
Browse files

dt-bindings: leds: add TI/National Semiconductor LP5812 LED Driver



The LP5812 is a 4x3 RGB LED driver with an autonomous animation
engine and time-cross-multiplexing (TCM) support for up to 12 LEDs
or 4 RGB LEDs. It supports both analog (256 levels) and PWM (8-bit)
dimming, including exponential PWM for smooth brightness control.

Reviewed-by: default avatarRob Herring (Arm) <robh@kernel.org>
Signed-off-by: default avatarNam Tran <trannamatk@gmail.com>
Link: https://patch.msgid.link/20251221041950.4631-2-trannamatk@gmail.com


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent a18983b9
Loading
Loading
Loading
Loading
+246 −0
Original line number Diff line number Diff line
# 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>;
                };
            };
        };
    };

...
+6 −0
Original line number Diff line number Diff line
@@ -25836,6 +25836,12 @@ S: Supported
F:	Documentation/devicetree/bindings/iio/dac/ti,dac7612.yaml
F:	drivers/iio/dac/ti-dac7612.c
TEXAS INSTRUMENTS' LP5812 RGB LED DRIVER
M:	Nam Tran <trannamatk@gmail.com>
L:	linux-leds@vger.kernel.org
S:	Maintained
F:	Documentation/devicetree/bindings/leds/ti,lp5812.yaml
TEXAS INSTRUMENTS' LB8864 LED BACKLIGHT DRIVER
M:	Alexander Sverdlin <alexander.sverdlin@siemens.com>
L:	linux-leds@vger.kernel.org