leds: triggers: send uevent when changing triggers
authorColin Cross <ccross@android.com>
Mon, 27 Aug 2012 01:31:49 +0000 (09:31 +0800)
committerBryan Wu <bryan.wu@canonical.com>
Tue, 11 Sep 2012 10:32:41 +0000 (18:32 +0800)
Some triggers create sysfs files when they are enabled. Send a uevent
"change" notification whenever the trigger is changed to allow userspace
processes such as udev to modify permissions on the new files.

A change notification will also be sent during registration of led class
devices or led triggers if the default trigger of an led class device
is found.

(bryan.wu@canonical.com: rename trigger to trig to fix the build error)

Signed-off-by: Colin Cross <ccross@android.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
drivers/leds/led-triggers.c

index b53bf54..262eb41 100644 (file)
@@ -102,6 +102,12 @@ EXPORT_SYMBOL_GPL(led_trigger_show);
 void led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
 {
        unsigned long flags;
+       char *event = NULL;
+       char *envp[2];
+       const char *name;
+
+       name = trig ? trig->name : "none";
+       event = kasprintf(GFP_KERNEL, "TRIGGER=%s", name);
 
        /* Remove any existing trigger */
        if (led_cdev->trigger) {
@@ -124,6 +130,13 @@ void led_trigger_set(struct led_classdev *led_cdev, struct led_trigger *trig)
                if (trig->activate)
                        trig->activate(led_cdev);
        }
+
+       if (event) {
+               envp[0] = event;
+               envp[1] = NULL;
+               kobject_uevent_env(&led_cdev->dev->kobj, KOBJ_CHANGE, envp);
+               kfree(event);
+       }
 }
 EXPORT_SYMBOL_GPL(led_trigger_set);