LED: make triggers track their state
authorGrazvydas Ignotas <notasas@gmail.com>
Tue, 24 Nov 2009 12:24:45 +0000 (14:24 +0200)
committerGrazvydas Ignotas <notasas@gmail.com>
Tue, 24 Nov 2009 12:24:45 +0000 (14:24 +0200)
Sometimes events trigger before LEDs are registered, but simple
triggers don't track their state and LED starts as if nothing
happened.

Add some state tracking to simple triggers.

drivers/leds/led-triggers.c
include/linux/leds.h

index f910eaf..2df6ce6 100644 (file)
@@ -121,6 +121,8 @@ void led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trigger)
                led_cdev->trigger = trigger;
                if (trigger->activate)
                        trigger->activate(led_cdev);
+               else
+                       led_set_brightness(led_cdev, trigger->prev_brightness);
        }
 }
 EXPORT_SYMBOL_GPL(led_trigger_set);
@@ -218,6 +220,7 @@ void led_trigger_event(struct led_trigger *trigger,
                led_cdev = list_entry(entry, struct led_classdev, trig_list);
                led_set_brightness(led_cdev, brightness);
        }
+       trigger->prev_brightness = brightness;
        read_unlock(&trigger->leddev_list_lock);
 }
 EXPORT_SYMBOL_GPL(led_trigger_event);
index d41ccb5..8a4e0b3 100644 (file)
@@ -85,6 +85,8 @@ struct led_trigger {
 
        /* Link to next registered trigger */
        struct list_head  next_trig;
+
+       enum led_brightness prev_brightness;
 };
 
 /* Registration functions for complex triggers */