diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2019-08-16 06:52:29 -0400 |
---|---|---|
committer | Jacek Anaszewski <jacek.anaszewski@gmail.com> | 2019-08-26 14:03:58 -0400 |
commit | 1dbb9fb4082ce2a2f1cf9596881ddece062d15d0 (patch) | |
tree | 855d05e70b8bcd092c16fd1f82a1e6bd6bbe4b7b | |
parent | 517ea49a7b23c6730ed1a23f152fcd32173eb300 (diff) |
leds: Allow to call led_classdev_unregister() unconditionally
If in the certain driver the LED is optional, and it's a majority of them,
the call of led_classdev_unregister() still requires some additional
checks.
The usual pattern on unregistering is to check for NULL, but we also check
for IS_ERR() in case device_create_with_groups() fails.
The change will reduce a burden in a lot of drivers to repeatedly check
for above conditions.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
-rw-r--r-- | drivers/leds/led-class.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 052c7571e188..647b1263c579 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c | |||
@@ -287,6 +287,7 @@ int led_classdev_register_ext(struct device *parent, | |||
287 | ret = led_add_brightness_hw_changed(led_cdev); | 287 | ret = led_add_brightness_hw_changed(led_cdev); |
288 | if (ret) { | 288 | if (ret) { |
289 | device_unregister(led_cdev->dev); | 289 | device_unregister(led_cdev->dev); |
290 | led_cdev->dev = NULL; | ||
290 | mutex_unlock(&led_cdev->led_access); | 291 | mutex_unlock(&led_cdev->led_access); |
291 | return ret; | 292 | return ret; |
292 | } | 293 | } |
@@ -332,6 +333,9 @@ EXPORT_SYMBOL_GPL(led_classdev_register_ext); | |||
332 | */ | 333 | */ |
333 | void led_classdev_unregister(struct led_classdev *led_cdev) | 334 | void led_classdev_unregister(struct led_classdev *led_cdev) |
334 | { | 335 | { |
336 | if (IS_ERR_OR_NULL(led_cdev->dev)) | ||
337 | return; | ||
338 | |||
335 | #ifdef CONFIG_LEDS_TRIGGERS | 339 | #ifdef CONFIG_LEDS_TRIGGERS |
336 | down_write(&led_cdev->trigger_lock); | 340 | down_write(&led_cdev->trigger_lock); |
337 | if (led_cdev->trigger) | 341 | if (led_cdev->trigger) |