leds: core: add managed version of led_trigger_register
PATCH 1/1 leds: core: add managed version of led_trigger_register
Complementing devm_led_classdev_register add a managed version of led_trigger_register.
I omit a managed version of led_classdev_unregister as the equivalent devm_led_classdev_unregister isn't used in the kernel as of today.
Signed-off-by Heiner Kallweit <[email protected]>
--- drivers/leds/led-triggers.c | 28 ++++++++++++++++++++++++++++ include/linux/leds.h | 2 ++ 2 files changed, 30 insertions(+)
drivers/leds/led-triggers.c +28 -0
@@ -249,6 +249,34 @@ void led_trigger_unregister(struct led_trigger *trig) }EXPORT_SYMBOL_GPL (led_trigger_unregister); +static void devm_led_trigger_release (struct device *dev,void *res) +{ +led_trigger_unregister (*(struct led_trigger **)res); +} + +int devm_led_trigger_register (struct device *dev, +struct led_trigger *trig) +{ +struct led_trigger **dr; +int rc; + + dr =devres_alloc (devm_led_trigger_release,sizeof (*dr), +GFP_KERNEL ); +if (!dr) +return -ENOMEM ; + + *dr = trig; + + rc =led_trigger_register (trig); +if (rc) +devres_free (dr); +else +devres_add (dev, dr); + +return rc; +} +EXPORT_SYMBOL_GPL (devm_led_trigger_register); +/* Simple LED Tigger Interface */ void led_trigger_event(struct led_trigger *trig,
include/linux/leds.h +2 -0
@@ -231,6 +231,8 @@ ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr,/* Registration functions for complex triggers */ extern int led_trigger_register (struct led_trigger *trigger);extern void led_trigger_unregister (struct led_trigger *trigger); +extern int devm_led_trigger_register (struct device *dev, +struct led_trigger *trigger);extern void led_trigger_register_simple (const char *name,struct led_trigger **trigger);
Signature · 1 line
2.6.4
Jacek Anaszewski
AppliedHi Heiner,
Quoted 57 lines · Heiner Kallweit
Complementing
devm_led_classdev_registeradd a managed version ofled_trigger_register.I omit a managed version of
led_classdev_unregisteras the equivalentdevm_led_classdev_unregisterisn't used in the kernel as of today.Signed-off-by Heiner Kallweit <[email protected]>--- drivers/leds/led-triggers.c | 28 ++++++++++++++++++++++++++++ include/linux/leds.h | 2 ++ 2 files changed, 30 insertions(+)drivers/leds/led-triggers.c +28
-0@@ -249,6 +249,34 @@ void led_trigger_unregister(struct led_trigger *trig) }EXPORT_SYMBOL_GPL (led_trigger_unregister); +static void devm_led_trigger_release (struct device *dev,void *res) +{ +led_trigger_unregister (*(struct led_trigger **)res); +} + +int devm_led_trigger_register (struct device *dev, +struct led_trigger *trig) +{ +struct led_trigger **dr; +int rc; + + dr =devres_alloc (devm_led_trigger_release,sizeof (*dr), +GFP_KERNEL ); +if (!dr) +return -ENOMEM ; + + *dr = trig; + + rc =led_trigger_register (trig); +if (rc) +devres_free (dr); +else +devres_add (dev, dr); + +return rc; +} +EXPORT_SYMBOL_GPL (devm_led_trigger_register); +/* Simple LED Tigger Interface */ void led_trigger_event(struct led_trigger *trig,include/linux/leds.h +0
-0
include/linux/leds.h ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr, · line 238
Quoted 8 lines
include/linux/leds.h +2
-0@@ -231,6 +231,8 @@ ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr,/* Registration functions for complex triggers */ extern int led_trigger_register (struct led_trigger *trigger);extern void led_trigger_unregister (struct led_trigger *trigger); +extern int devm_led_trigger_register (struct device *dev, +struct led_trigger *trigger);extern void led_trigger_register_simple (const char *name,struct led_trigger **trigger);
Applied, thanks.
Signature · 2 lines
Best Regards, Jacek Anaszewski