}
 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,
 
 /* 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);