aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/leds/led-class.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2006-11-04 22:42:39 -0500
committerDmitry Torokhov <dtor@insightbb.com>2006-11-04 22:42:39 -0500
commit752c58a471c108d64da1676b2925dfbd83eb177e (patch)
treefbffa0d7c54cd812950dffc16d642c9d449f4faf /drivers/leds/led-class.c
parentInput: drivers/char/keyboard.c - small cleanup in k_cur() (diff)
parentMake sure "user->sigpending" count is in sync (diff)
downloadlinux-dev-752c58a471c108d64da1676b2925dfbd83eb177e.tar.xz
linux-dev-752c58a471c108d64da1676b2925dfbd83eb177e.zip
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/leds/led-class.c')
-rw-r--r--drivers/leds/led-class.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
index aecbbe2e89a9..3c1711210e38 100644
--- a/drivers/leds/led-class.c
+++ b/drivers/leds/led-class.c
@@ -91,6 +91,8 @@ EXPORT_SYMBOL_GPL(led_classdev_resume);
*/
int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
{
+ int rc;
+
led_cdev->class_dev = class_device_create(leds_class, NULL, 0,
parent, "%s", led_cdev->name);
if (unlikely(IS_ERR(led_cdev->class_dev)))
@@ -99,8 +101,10 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
class_set_devdata(led_cdev->class_dev, led_cdev);
/* register the attributes */
- class_device_create_file(led_cdev->class_dev,
- &class_device_attr_brightness);
+ rc = class_device_create_file(led_cdev->class_dev,
+ &class_device_attr_brightness);
+ if (rc)
+ goto err_out;
/* add to the list of leds */
write_lock(&leds_list_lock);
@@ -110,16 +114,28 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
#ifdef CONFIG_LEDS_TRIGGERS
rwlock_init(&led_cdev->trigger_lock);
- led_trigger_set_default(led_cdev);
+ rc = class_device_create_file(led_cdev->class_dev,
+ &class_device_attr_trigger);
+ if (rc)
+ goto err_out_led_list;
- class_device_create_file(led_cdev->class_dev,
- &class_device_attr_trigger);
+ led_trigger_set_default(led_cdev);
#endif
printk(KERN_INFO "Registered led device: %s\n",
led_cdev->class_dev->class_id);
return 0;
+
+#ifdef CONFIG_LEDS_TRIGGERS
+err_out_led_list:
+ class_device_remove_file(led_cdev->class_dev,
+ &class_device_attr_brightness);
+ list_del(&led_cdev->node);
+#endif
+err_out:
+ class_device_unregister(led_cdev->class_dev);
+ return rc;
}
EXPORT_SYMBOL_GPL(led_classdev_register);