linux/drivers/leds
Tony Makkiel 7cfe749fad leds: core: Fix brightness setting upon hardware blinking enabled
Commit 76931edd54 ("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: f1e80c0741 ("leds: core: Add two new LED_BLINK_ flags")
Signed-off-by: Tony Makkiel <tony.makkiel@daqri.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>
2016-06-08 11:47:06 +02:00
..
trigger leds: triggers: Allow to switch the trigger to "panic" on a kernel panic 2016-05-06 10:22:09 +02:00
dell-led.c dell-led: use dell_smbios_send_request() for performing SMBIOS calls 2016-03-23 10:05:44 -07:00
Kconfig leds: ss4200: Add depend on x86 arch 2016-04-19 09:01:19 +02:00
led-class-flash.c leds: flash: Remove checking for state < 1 in flash_strobe_store() 2016-01-04 09:57:37 +01:00
led-class.c leds: core: avoid error message when a USB LED device is unplugged 2016-03-14 09:22:20 +01:00
led-core.c leds: core: Fix brightness setting upon hardware blinking enabled 2016-06-08 11:47:06 +02:00
led-triggers.c leds: triggers: Allow to switch the trigger to "panic" on a kernel panic 2016-05-06 10:22:09 +02:00
leds-88pm860x.c leds: 88pm860x: Use devm_led_classdev_register 2016-03-14 09:22:22 +01:00
leds-aat1290.c leds: aat1290: Add missing of_node_put 2016-01-04 09:57:38 +01:00
leds-adp5520.c leds: adp5520: Remove work queue 2016-01-04 09:57:32 +01:00
leds-asic3.c leds: drop owner assignment from platform_drivers 2014-10-20 16:20:43 +02:00
leds-bcm6328.c leds: bcm6328: improve blink support 2016-01-04 09:57:40 +01:00
leds-bcm6358.c leds: bcm6358: remove unneeded busy status check 2016-01-04 09:57:40 +01:00
leds-bd2802.c leds: bd2802: Remove work queue 2016-01-04 09:57:32 +01:00
leds-blinkm.c leds: blinkm: Remove work queue 2016-01-04 09:57:32 +01:00
leds-clevo-mail.c leds: drop owner assignment from platform_drivers 2014-10-20 16:20:43 +02:00
leds-cobalt-qube.c leds: leds-cobalt-qube: Use devm_led_classdev_register 2015-11-03 08:59:09 +01:00
leds-cobalt-raq.c drivers/leds: don't use module_init in non-modular leds-cobalt-raq.c 2015-06-22 13:57:09 -07:00
leds-da903x.c leds: da903x: Use devm_led_classdev_register 2016-03-14 09:22:22 +01:00
leds-da9052.c leds: da9052: Remove work queue 2016-01-04 09:57:34 +01:00
leds-dac124s085.c leds: dac124d085: Remove work queue 2016-01-04 09:57:34 +01:00
leds-fsg.c leds: leds-fsg: Use devm_led_classdev_register 2015-08-28 14:06:23 +02:00
leds-gpio-register.c led: gpio: Fix possible ZERO_SIZE_PTR pointer dereferencing error. 2014-09-29 10:21:01 -07:00
leds-gpio.c leds: gpio: Support the "panic-indicator" firmware property 2016-05-06 10:26:07 +02:00
leds-hp6xx.c leds: leds-hp6xx: Use devm_led_classdev_register 2015-11-03 08:59:11 +01:00
leds-ipaq-micro.c leds: ipaq-micro: Implement brightness_set_blocking op 2016-01-04 09:57:38 +01:00
leds-is31fl32xx.c leds: Add SN3218 and SN3216 support to the IS31FL32XX driver 2016-03-14 09:22:22 +01:00
leds-ktd2692.c leds: ktd2692: Add missing of_node_put 2016-01-04 09:57:37 +01:00
leds-lm355x.c leds: lm355x: Remove work queue 2016-01-04 09:57:36 +01:00
leds-lm3530.c leds: Drop owner assignment from i2c_driver 2015-08-28 14:06:02 +02:00
leds-lm3533.c leds: lm3533: Use devm_led_classdev_register 2016-03-14 09:22:21 +01:00
leds-lm3642.c leds: lm3642: Remove work queue 2016-01-04 09:57:32 +01:00
leds-locomo.c leds: leds-locomo.c: Use devm_led_classdev_register 2015-11-03 08:59:50 +01:00
leds-lp55xx-common.c leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp55xx-common.h leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp3944.c leds: lp3944: improve wording and formatting in a comment 2016-03-14 09:22:20 +01:00
leds-lp5521.c leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp5523.c leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp5562.c leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp8501.c leds: lp55xx: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lp8788.c leds: lp8788: Use devm_led_classdev_register 2016-03-14 09:22:22 +01:00
leds-lp8860.c leds: lp8860: Remove work queue 2016-01-04 09:57:33 +01:00
leds-lt3593.c leds: lt3593: Remove work queue 2016-01-04 09:57:34 +01:00
leds-max8997.c leds: max8997: Use devm_led_classdev_register 2016-03-14 09:22:23 +01:00
leds-max77693.c leds: max77693: Add missing of_node_put 2016-01-04 09:57:38 +01:00
leds-mc13783.c leds: mc13783: Remove work queue 2016-01-04 09:57:35 +01:00
leds-menf21bmc.c leds: leds-menf21bmc.c: Use devm_led_class_register 2015-11-03 08:59:52 +01:00
leds-net48xx.c leds: leds-net48xx: Use devm_led_classdev_register 2015-11-03 08:59:54 +01:00
leds-netxbig.c leds: netxbig: set led_classdev max_brightness 2015-11-03 08:59:36 +01:00
leds-ns2.c leds: ns2: Remove work queue 2016-01-04 09:57:37 +01:00
leds-ot200.c leds: leds-ot200: Use devm_led_classdev_register 2015-11-03 08:59:13 +01:00
leds-pca955x.c leds: pca955x: Remove work queue 2016-01-04 09:57:33 +01:00
leds-pca963x.c leds: pca963x: Remove work queue 2016-01-04 09:57:34 +01:00
leds-pca9532.c GPIO bulk updates for the v4.5 kernel cycle: 2016-01-17 12:32:01 -08:00
leds-powernv.c leds: powernv: Implement brightness_set_blocking op 2016-01-04 09:57:38 +01:00
leds-pwm.c leds: pwm: Use pwm_get_args() where appropriate 2016-05-17 14:45:02 +02:00
leds-rb532.c leds: drop owner assignment from platform_drivers 2014-10-20 16:20:43 +02:00
leds-regulator.c leds: regulator: Remove work queue 2016-01-04 09:57:35 +01:00
leds-s3c24xx.c leds: s3c24xx: Use devm_led_classdev_register 2016-03-14 09:22:22 +01:00
leds-sead3.c LED/MIPS: Move SEAD3 LED driver to where it belongs. 2015-11-03 08:59:20 +01:00
leds-ss4200.c leds: ss4200: add DMI data for FSC SCALEO Home Server 2016-04-19 09:03:20 +02:00
leds-sunfire.c leds: sunfire: Use platform_register/unregister_drivers() 2016-01-04 09:57:38 +01:00
leds-syscon.c leds: syscon: Make the driver explicitly non-modular 2016-01-04 09:57:39 +01:00
leds-tca6507.c leds: tca6507: silence an uninitialized variable warning 2016-04-14 13:08:58 +02:00
leds-tlc591xx.c leds: tlc591xx: Remove work queue 2016-01-04 09:57:32 +01:00
leds-versatile.c ARM/leds: move ARM Versatile LED driver to leds subsystem 2014-03-28 10:54:15 +01:00
leds-wm831x-status.c leds: wm831x-status: Use devm_led_classdev_register 2016-03-14 09:22:22 +01:00
leds-wm8350.c leds: wm8350: Remove work queue 2016-01-04 09:57:35 +01:00
leds-wrap.c leds: leds-wrap.c: Use devm_led_classdev_register 2015-11-03 08:59:58 +01:00
leds.h leds: triggers: Allow to switch the trigger to "panic" on a kernel panic 2016-05-06 10:22:09 +02:00
Makefile leds: Add driver for the ISSI IS31FL32xx family of LED controllers 2016-03-14 09:22:21 +01:00