]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/leds/leds-lp55xx-common.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[karo-tx-linux.git] / drivers / leds / leds-lp55xx-common.c
index 578902ab604f999735e87ddeb8b4cc52bc40cdde..d9eb8415742386ce4ad9eec1dade07ef809a59de 100644 (file)
@@ -478,12 +478,9 @@ void lp55xx_unregister_leds(struct lp55xx_led *led, struct lp55xx_chip *chip)
 {
        int i;
        struct lp55xx_led *each;
-       struct kobject *kobj;
 
        for (i = 0; i < chip->num_leds; i++) {
                each = led + i;
-               kobj = &led->cdev.dev->kobj;
-               sysfs_remove_group(kobj, &lp55xx_led_attr_group);
                led_classdev_unregister(&each->cdev);
                flush_work(&each->brightness_work);
        }
@@ -493,11 +490,34 @@ EXPORT_SYMBOL_GPL(lp55xx_unregister_leds);
 int lp55xx_register_sysfs(struct lp55xx_chip *chip)
 {
        struct device *dev = &chip->cl->dev;
+       struct lp55xx_device_config *cfg = chip->cfg;
+       int ret;
 
-       return sysfs_create_group(&dev->kobj, &lp55xx_engine_attr_group);
+       if (!cfg->run_engine || !cfg->firmware_cb)
+               goto dev_specific_attrs;
+
+       ret = sysfs_create_group(&dev->kobj, &lp55xx_engine_attr_group);
+       if (ret)
+               return ret;
+
+dev_specific_attrs:
+       return cfg->dev_attr_group ?
+               sysfs_create_group(&dev->kobj, cfg->dev_attr_group) : 0;
 }
 EXPORT_SYMBOL_GPL(lp55xx_register_sysfs);
 
+void lp55xx_unregister_sysfs(struct lp55xx_chip *chip)
+{
+       struct device *dev = &chip->cl->dev;
+       struct lp55xx_device_config *cfg = chip->cfg;
+
+       if (cfg->dev_attr_group)
+               sysfs_remove_group(&dev->kobj, cfg->dev_attr_group);
+
+       sysfs_remove_group(&dev->kobj, &lp55xx_engine_attr_group);
+}
+EXPORT_SYMBOL_GPL(lp55xx_unregister_sysfs);
+
 MODULE_AUTHOR("Milo Kim <milo.kim@ti.com>");
 MODULE_DESCRIPTION("LP55xx Common Driver");
 MODULE_LICENSE("GPL");