Browse Source

leds: triggers: handle .trigger_data and .activated() in the core

This helps keeping these two fields consistent and drivers don't need to
care for this themselves any more.

Note that .activated isn't set to true automatically because that might
confuse some triggers when deactivating (e.g. ledtrig-gpio).

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Uwe Kleine-König 7 years ago
parent
commit
a7d5904a6f
1 changed files with 3 additions and 0 deletions
  1. 3 0
      drivers/leds/led-triggers.c

+ 3 - 0
drivers/leds/led-triggers.c

@@ -129,6 +129,8 @@ int led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
 			led_cdev->trigger->deactivate(led_cdev);
 			led_cdev->trigger->deactivate(led_cdev);
 		device_remove_groups(led_cdev->dev, led_cdev->trigger->groups);
 		device_remove_groups(led_cdev->dev, led_cdev->trigger->groups);
 		led_cdev->trigger = NULL;
 		led_cdev->trigger = NULL;
+		led_cdev->trigger_data = NULL;
+		led_cdev->activated = false;
 		led_set_brightness(led_cdev, LED_OFF);
 		led_set_brightness(led_cdev, LED_OFF);
 	}
 	}
 	if (trig) {
 	if (trig) {
@@ -170,6 +172,7 @@ err_add_groups:
 err_activate:
 err_activate:
 
 
 	led_cdev->trigger = NULL;
 	led_cdev->trigger = NULL;
+	led_cdev->trigger_data = NULL;
 	write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
 	write_lock_irqsave(&led_cdev->trigger->leddev_list_lock, flags);
 	list_del(&led_cdev->trig_list);
 	list_del(&led_cdev->trig_list);
 	write_unlock_irqrestore(&led_cdev->trigger->leddev_list_lock, flags);
 	write_unlock_irqrestore(&led_cdev->trigger->leddev_list_lock, flags);