]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/leds/leds-lp8860.c
Merge tag 'for-5.4/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/devic...
[linux.git] / drivers / leds / leds-lp8860.c
index ed680d0c15b0be70bc41dc285e8b45df3a439033..ac2f5d6272dc0e7389bed88b76a1d2e943590576 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/of_gpio.h>
 #include <linux/gpio/consumer.h>
 #include <linux/slab.h>
-#include <uapi/linux/uleds.h>
 
 #define LP8860_DISP_CL1_BRT_MSB                0x00
 #define LP8860_DISP_CL1_BRT_LSB                0x01
@@ -83,6 +82,8 @@
 
 #define LP8860_CLEAR_FAULTS            0x01
 
+#define LP8860_NAME                    "lp8860"
+
 /**
  * struct lp8860_led -
  * @lock - Lock for reading/writing the device
@@ -92,7 +93,6 @@
  * @eeprom_regmap - EEPROM register map
  * @enable_gpio - VDDIO/EN gpio to enable communication interface
  * @regulator - LED supply regulator pointer
- * @label - LED label
  */
 struct lp8860_led {
        struct mutex lock;
@@ -102,7 +102,6 @@ struct lp8860_led {
        struct regmap *eeprom_regmap;
        struct gpio_desc *enable_gpio;
        struct regulator *regulator;
-       char label[LED_MAX_NAME_SIZE];
 };
 
 struct lp8860_eeprom_reg {
@@ -383,25 +382,19 @@ static int lp8860_probe(struct i2c_client *client,
        struct lp8860_led *led;
        struct device_node *np = client->dev.of_node;
        struct device_node *child_node;
-       const char *name;
+       struct led_init_data init_data = {};
 
        led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
        if (!led)
                return -ENOMEM;
 
-       for_each_available_child_of_node(np, child_node) {
-               led->led_dev.default_trigger = of_get_property(child_node,
-                                                   "linux,default-trigger",
-                                                   NULL);
-
-               ret = of_property_read_string(child_node, "label", &name);
-               if (!ret)
-                       snprintf(led->label, sizeof(led->label), "%s:%s",
-                                id->name, name);
-               else
-                       snprintf(led->label, sizeof(led->label),
-                               "%s::display_cluster", id->name);
-       }
+       child_node = of_get_next_available_child(np, NULL);
+       if (!child_node)
+               return -EINVAL;
+
+       led->led_dev.default_trigger = of_get_property(child_node,
+                                           "linux,default-trigger",
+                                           NULL);
 
        led->enable_gpio = devm_gpiod_get_optional(&client->dev,
                                                   "enable", GPIOD_OUT_LOW);
@@ -416,7 +409,6 @@ static int lp8860_probe(struct i2c_client *client,
                led->regulator = NULL;
 
        led->client = client;
-       led->led_dev.name = led->label;
        led->led_dev.brightness_set_blocking = lp8860_brightness_set;
 
        mutex_init(&led->lock);
@@ -443,7 +435,12 @@ static int lp8860_probe(struct i2c_client *client,
        if (ret)
                return ret;
 
-       ret = devm_led_classdev_register(&client->dev, &led->led_dev);
+       init_data.fwnode = of_fwnode_handle(child_node);
+       init_data.devicename = LP8860_NAME;
+       init_data.default_label = ":display_cluster";
+
+       ret = devm_led_classdev_register_ext(&client->dev, &led->led_dev,
+                                            &init_data);
        if (ret) {
                dev_err(&client->dev, "led register err: %d\n", ret);
                return ret;