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.
Signed-off-by: Nam Tran <trannamatk@gmail.com>
---
.../devicetree/bindings/leds/ti,lp5812.yaml | 251 ++++++++++++++++++
MAINTAINERS | 6 +
2 files changed, 257 insertions(+)
create mode 100644 Documentation/devicetree/bindings/leds/ti,lp5812.yaml
diff --git a/Documentation/devicetree/bindings/leds/ti,lp5812.yaml b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
new file mode 100644
index 000000000000..ea9d6ae92344
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
@@ -0,0 +1,251 @@
+# 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
+ - label
+
+ "^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:
+ - reg
+ - label
+
+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>;
+ };
+ };
+ };
+ };
+
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 6df89b14b521..22da152c3c87 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -25448,6 +25448,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
--
2.25.1
On Mon, Nov 24, 2025 at 02:10:40AM +0700, Nam Tran wrote:
> 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.
>
> Signed-off-by: Nam Tran <trannamatk@gmail.com>
> ---
> .../devicetree/bindings/leds/ti,lp5812.yaml | 251 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 257 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/leds/ti,lp5812.yaml
>
> diff --git a/Documentation/devicetree/bindings/leds/ti,lp5812.yaml b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
> new file mode 100644
> index 000000000000..ea9d6ae92344
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
> @@ -0,0 +1,251 @@
> +# 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
> + - label
No, why? That's legacy property and color and function are preferred.
> +
> + "^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:
> + - reg
> + - label
Why? Same problems.
Please stop making continuous changes to the binding.
> +
> +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";
Completely useless label... You require labels, so people need to write
something but since they do not know what to write they call LED 1 a
LED1. This is just not helping.
Use color and function properties. Same everywhere else.
Best regards,
Krzysztof
On 24/11/2025 08:57, Krzysztof Kozlowski wrote:
> On Mon, Nov 24, 2025 at 02:10:40AM +0700, Nam Tran wrote:
>> 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.
>>
>> Signed-off-by: Nam Tran <trannamatk@gmail.com>
>> ---
>> .../devicetree/bindings/leds/ti,lp5812.yaml | 251 ++++++++++++++++++
>> MAINTAINERS | 6 +
>> 2 files changed, 257 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/leds/ti,lp5812.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/leds/ti,lp5812.yaml b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
>> new file mode 100644
>> index 000000000000..ea9d6ae92344
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/leds/ti,lp5812.yaml
>> @@ -0,0 +1,251 @@
>> +# 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
>> + - label
>
> No, why? That's legacy property and color and function are preferred.
>
>> +
>> + "^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:
>> + - reg
>> + - label
>
> Why? Same problems.
>
> Please stop making continuous changes to the binding.
>
>
>> +
>> +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";
>
> Completely useless label... You require labels, so people need to write
> something but since they do not know what to write they call LED 1 a
> LED1. This is just not helping.
>
> Use color and function properties. Same everywhere else.
>
And now I went to older versions and I see they were correct - you had
color! You replace correct code with wrong one and drop review. This
patchset is not really improving.
BTW, You actually received review also at v6, so this was reviewed 3 or
more times. Way too many times.
Best regards,
Krzysztof
On Mon, 24 Nov 2025, Krzysztof Kozlowski wrote:
>>> +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";
>>
>> Completely useless label... You require labels, so people need to write
>> something but since they do not know what to write they call LED 1 a
>> LED1. This is just not helping.
>>
>> Use color and function properties. Same everywhere else.
>>
>
>And now I went to older versions and I see they were correct - you had
>color! You replace correct code with wrong one and drop review. This
>patchset is not really improving.
>
>BTW, You actually received review also at v6, so this was reviewed 3 or
>more times. Way too many times.
Thanks for your feedback.
To address your concerns, I plan to roll back to v17, which was reviewed
and approved by Rob.
The only intentional addition in v17 compared to v14, which you previously
reviewed, is the ti,scan-mode property to configure the LP5812 scan mode.
No other aspects of the binding are modified.
I hope this resolves the issues and keeps the binding stable.
Thanks again for your guidance.
Best regards,
Nam Tran
On Mon, Nov 24, 2025 at 02:10:40AM +0700, Nam Tran wrote: > 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. > > Signed-off-by: Nam Tran <trannamatk@gmail.com> You received review from me - where did you explain reasons of dropping it? You then received SECOND review from Rob and where did you explain reasons of ignoring/dropping it? You will not get third review, please start respecting our work. Read carefully submitting patches document. <form letter> This is a friendly reminder during the review process. It looks like you received a tag and forgot to add it. If you do not know the process, here is a short explanation: Please add Acked-by/Reviewed-by/Tested-by tags when posting new versions of patchset, under or above your Signed-off-by tag, unless patch changed significantly (e.g. new properties added to the DT bindings). Tag is "received", when provided in a message replied to you on the mailing list. Tools like b4 can help here. However, there's no need to repost patches *only* to add the tags. The upstream maintainer will do that for tags received on the version they apply. Please read: https://elixir.bootlin.com/linux/v6.12-rc3/source/Documentation/process/submitting-patches.rst#L577 If a tag was not added on purpose, please state why and what changed. </form letter> Best regards, Krzysztof
On Mon, Nov 24, 2025 at 08:30:38AM +0100, Krzysztof Kozlowski wrote: > On Mon, Nov 24, 2025 at 02:10:40AM +0700, Nam Tran wrote: > > 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. > > > > Signed-off-by: Nam Tran <trannamatk@gmail.com> > > You received review from me - where did you explain reasons of dropping > it? > > You then received SECOND review from Rob and where did you explain > reasons of ignoring/dropping it? > > You will not get third review, please start respecting our work. Read > carefully submitting patches document. I gave it second read and found it, although I admit it is not obvious. I really do not expect changes to the binding at v15, then again at v17. Best regards, Krzysztof
© 2016 - 2025 Red Hat, Inc.