Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <hkallweit1@gmail.com>
Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com>

authored by

Heiner Kallweit and committed by
Jacek Anaszewski
9534cc31 1259efaa

+30
+28
drivers/leds/led-triggers.c
··· 249 249 } 250 250 EXPORT_SYMBOL_GPL(led_trigger_unregister); 251 251 252 + static void devm_led_trigger_release(struct device *dev, void *res) 253 + { 254 + led_trigger_unregister(*(struct led_trigger **)res); 255 + } 256 + 257 + int devm_led_trigger_register(struct device *dev, 258 + struct led_trigger *trig) 259 + { 260 + struct led_trigger **dr; 261 + int rc; 262 + 263 + dr = devres_alloc(devm_led_trigger_release, sizeof(*dr), 264 + GFP_KERNEL); 265 + if (!dr) 266 + return -ENOMEM; 267 + 268 + *dr = trig; 269 + 270 + rc = led_trigger_register(trig); 271 + if (rc) 272 + devres_free(dr); 273 + else 274 + devres_add(dev, dr); 275 + 276 + return rc; 277 + } 278 + EXPORT_SYMBOL_GPL(devm_led_trigger_register); 279 + 252 280 /* Simple LED Tigger Interface */ 253 281 254 282 void led_trigger_event(struct led_trigger *trig,
+2
include/linux/leds.h
··· 246 246 /* Registration functions for complex triggers */ 247 247 extern int led_trigger_register(struct led_trigger *trigger); 248 248 extern void led_trigger_unregister(struct led_trigger *trigger); 249 + extern int devm_led_trigger_register(struct device *dev, 250 + struct led_trigger *trigger); 249 251 250 252 extern void led_trigger_register_simple(const char *name, 251 253 struct led_trigger **trigger);