leds: triggers: handle .trigger_data and .activated() in the core
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 2 Jul 2018 20:05:23 +0000 (22:05 +0200)
committerJacek Anaszewski <jacek.anaszewski@gmail.com>
Thu, 5 Jul 2018 21:21:10 +0000 (23:21 +0200)
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>
drivers/leds/led-triggers.c

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