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