Re: Abstraction for dual LED driver override feature

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Phill

On 7/25/19 2:43 PM, Philip Molloy wrote:
Hello,

I'm writing a driver for the TI LM3644 dual current flash LED driver[1] and could use some advice on how to abstract a feature of the device that allows the user to fix the brightness of the 2nd LED to the brightness of the 1st.

Bit 7 of the LED1 torch brightness register signifies whether the LED2 torch current should be set to the LED1 torch current. By default this override is enabled.

Is it worth exposing this feature to userspace? And what might a good way to do that be?

Or alternatively, hide the feature by setting bit 7 of the LED1 torch brightness register to 0 every time I write to the LED2 torch brightness register?

Unfortunately, I couldn't find an example of similar functionality in any of the mainline LED kernel modules.

You could define this in the DT using the pre-defined led-sources property.

Unless this needs to be run time configurable which it does not appear

that it needs to be.  The default is combined LED brightness registers.

led-sources = < 0 1 >;

If led-sources does not exist in the DT then assume they are separate.

Example DT with combined LED outputs

led-controller@63 {
    compatible = "ti,lm3644";
    #address-cells = <1>;
    #size-cells = <0>;
    reg = <0x63>;

    led@0 {
        reg = <0>;

        led-sources = < 0 1 >;

        function = LED_FUNCTION_TORCH;
        color = <LED_COLOR_ID_WHITE>;
        led-max-microamp = <376000>;
        flash-max-microamp = <1500000>;
        flash-max-timeout-us = <1600000>;
    };
}

Example DT with separated LED outputs where output is the flash and output 2 is a torch

This would be two separate class registrations

led-controller@63 {
    compatible = "ti,lm3644";
    #address-cells = <1>;
    #size-cells = <0>;
    reg = <0x63>;

    led@0 {
        reg = <0>;

        function = LED_FUNCTION_FLASH;

        color = <LED_COLOR_ID_WHITE>;
        led-max-microamp = <376000>;
        flash-max-microamp = <1500000>;
        flash-max-timeout-us = <1600000>;
    };

    led@1 {
        reg = <1>;

        function = LED_FUNCTION_TORCH;

        color = <LED_COLOR_ID_WHITE>;
    };

}



Dan



Best,
Philip

[1]: http://www.ti.com/lit/ds/symlink/lm3644.pdf



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux