linux/drivers/leds
Russell King 392369019e leds: leds-pwm: properly clean up after probe failure
When probing with DT, we add each LED one at a time.  If we find a LED
without a PWM device (because it is not available yet) we fail the
initialisation, unregister previous LEDs, and then by way of managed
resources, we free the structure.

The problem with this is we may have a scheduled and active work_struct
in this structure, and this results in a nasty kernel oops.

We need to cancel this work_struct properly upon cleanup - and the
cleanup we require is the same cleanup as we do when the LED platform
device is removed.  Rather than writing this same code three times,
move it into a separate function and use it in all three places.

Fixes: c971ff185f ("leds: leds-pwm: Defer led_pwm_set() if PWM can sleep")
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
2014-04-07 14:41:50 -07:00
..
trigger ledtrig-cpu: Handle CPU hot(un)plugging 2014-02-27 09:56:54 -08:00
dell-led.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
Kconfig leds-ot200: Fix dependencies 2014-03-11 10:29:08 -07:00
led-class.c leds: convert class code to use dev_groups 2013-07-26 18:05:17 -07:00
led-core.c leds: Turn off led if blinking is disabled 2014-02-27 09:56:55 -08:00
led-triggers.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-88pm860x.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-adp5520.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-asic3.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-atmel-pwm.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-bd2802.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-blinkm.c leds: blinkm: remove unnecessary spaces 2014-02-27 10:19:57 -08:00
leds-clevo-mail.c leds: clevo-mail: Make probe function __init 2014-03-13 15:53:31 -07:00
leds-cobalt-qube.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-cobalt-raq.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds 2012-12-15 12:52:42 -08:00
leds-da903x.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-da9052.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-dac124s085.c leds: dac124s085: Remove redundant spi_set_drvdata 2013-10-22 10:57:34 -07:00
leds-fsg.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-gpio-register.c
leds-gpio.c leds-gpio: of: introduce MODULE_DEVICE_TABLE for module autoloading 2014-03-06 11:56:59 -08:00
leds-hp6xx.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-lm355x.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-lm3530.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-lm3533.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-lm3642.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-locomo.c drivers/leds: Add module.h to files using it implicitly 2011-10-31 19:31:49 -04:00
leds-lp55xx-common.c leds: lp5523: Support LED MUX configuration on running a pattern 2014-01-27 17:28:48 -08:00
leds-lp55xx-common.h leds: lp55xx: add common macros for device attributes 2013-08-26 17:22:12 -07:00
leds-lp3944.c leds: leds-lp3944, fix "sparse" warning "mixing different enum types" 2013-08-26 17:22:11 -07:00
leds-lp5521.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-lp5523.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-lp5562.c leds: lp5562: remove unnecessary parentheses 2014-02-27 10:17:15 -08:00
leds-lp8501.c lp5523, lp8501: comment improvements 2014-01-10 11:44:44 +01:00
leds-lp8788.c leds-lp8788: fix a parent device in _probe() 2013-02-01 17:47:05 -08:00
leds-lt3593.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-max8997.c leds: remove use of __devexit 2012-11-28 12:35:06 -08:00
leds-mc13783.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-net48xx.c leds: leds-net48xx: Use linux/io.h instead of asm/io.h 2012-11-27 14:49:28 -08:00
leds-netxbig.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-ns2.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-ot200.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-pca955x.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-pca963x.c leds-pca963x: Fix device tree parsing 2013-08-26 17:22:14 -07:00
leds-pca9532.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-pca9685.c leds: Added driver for the NXP PCA9685 I2C chip 2013-10-22 10:57:35 -07:00
leds-pwm.c leds: leds-pwm: properly clean up after probe failure 2014-04-07 14:41:50 -07:00
leds-rb532.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds 2012-12-15 12:52:42 -08:00
leds-regulator.c leds: use dev_get_platdata() 2013-08-26 17:22:11 -07:00
leds-s3c24xx.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-ss4200.c leds: leds-ss4200: remove __initdata marker 2014-02-28 14:34:58 -08:00
leds-sunfire.c leds: use platform_{get,set}_drvdata() 2013-06-20 16:21:33 -07:00
leds-tca6507.c drivers: leds: leds-tca6507: check CONFIG_GPIOLIB whether defined for 'gpio_base' 2014-01-27 17:28:49 -08:00
leds-wm831x-status.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-wm8350.c drivers/leds: delete non-required instances of include <linux/init.h> 2014-02-27 09:56:56 -08:00
leds-wrap.c leds: leds-wrap: Use <linux/io.h> instead of <asm/io.h> 2012-11-27 14:49:30 -08:00
leds.h leds: delay led_set_brightness if stopping soft-blink 2012-09-11 18:32:40 +08:00
Makefile leds: Added driver for the NXP PCA9685 I2C chip 2013-10-22 10:57:35 -07:00