• Tony Makkiel's avatar
    leds: core: Fix brightness setting upon hardware blinking enabled · 7cfe749f
    Tony Makkiel authored
    Commit 76931edd ("leds: fix brightness changing when software blinking
    is active") changed the semantics of led_set_brightness() which according
    to the documentation should disable blinking upon any brightness setting.
    Moreover it made it different for soft blink case, where it was possible
    to change blink brightness, and for hardware blink case, where setting
    any brightness greater than 0 was ignored.
    
    While the change itself is against the documentation claims, it was driven
    also by the fact that timer trigger remained active after turning blinking
    off. Fixing that would have required major refactoring in the led-core,
    led-class, and led-triggers because of cyclic dependencies.
    
    Finally, it has been decided that allowing for brightness change during
    blinking is beneficial as it can be accomplished without disturbing
    blink rhythm.
    
    The change in brightness setting semantics will not affect existing
    LED class drivers that implement blink_set op thanks to the LED_BLINK_SW
    flag introduced by this patch. The flag state will be from now on checked
    in led_set_brightness() which will allow to distinguish between software
    and hardware blink mode. In the latter case the control will be passed
    directly to the drivers which apply their semantics on brightness set,
    which is disable the blinking in case of most such drivers. New drivers
    will apply new semantics and just change the brightness while hardware
    blinking is on, if possible.
    
    The issue was smuggled by subsequent LED core improvements, which modified
    the code that originally introduced the problem.
    
    Fixes: f1e80c07 ("leds: core: Add two new LED_BLINK_ flags")
    Signed-off-by: default avatarTony Makkiel <tony.makkiel@daqri.com>
    Signed-off-by: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
    7cfe749f
led-core.c 8.48 KB