leds: syscon: Get rid of custom led_init_default_state_get()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 3 Jan 2023 13:12:55 +0000 (15:12 +0200)
committerLee Jones <lee@kernel.org>
Mon, 30 Jan 2023 08:03:42 +0000 (08:03 +0000)
LED core provides a helper to parse default state from firmware node.
Use it instead of custom implementation.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230103131256.33894-11-andriy.shevchenko@linux.intel.com
drivers/leds/leds-syscon.c

index 7eddb8ecb44ec4d5c64361e42471c6d6ce830405..e38abb5e60c1bbbf9d0f2804179f290435628dc0 100644 (file)
@@ -61,7 +61,8 @@ static int syscon_led_probe(struct platform_device *pdev)
        struct device *parent;
        struct regmap *map;
        struct syscon_led *sled;
-       const char *state;
+       enum led_default_state state;
+       u32 value;
        int ret;
 
        parent = dev->parent;
@@ -86,34 +87,30 @@ static int syscon_led_probe(struct platform_device *pdev)
        if (of_property_read_u32(np, "mask", &sled->mask))
                return -EINVAL;
 
-       state = of_get_property(np, "default-state", NULL);
-       if (state) {
-               if (!strcmp(state, "keep")) {
-                       u32 val;
-
-                       ret = regmap_read(map, sled->offset, &val);
-                       if (ret < 0)
-                               return ret;
-                       sled->state = !!(val & sled->mask);
-               } else if (!strcmp(state, "on")) {
-                       sled->state = true;
-                       ret = regmap_update_bits(map, sled->offset,
-                                                sled->mask,
-                                                sled->mask);
-                       if (ret < 0)
-                               return ret;
-               } else {
-                       sled->state = false;
-                       ret = regmap_update_bits(map, sled->offset,
-                                                sled->mask, 0);
-                       if (ret < 0)
-                               return ret;
-               }
+       init_data.fwnode = of_fwnode_handle(np);
+
+       state = led_init_default_state_get(init_data.fwnode);
+       switch (state) {
+       case LEDS_DEFSTATE_ON:
+               ret = regmap_update_bits(map, sled->offset, sled->mask, sled->mask);
+               if (ret < 0)
+                       return ret;
+               sled->state = true;
+               break;
+       case LEDS_DEFSTATE_KEEP:
+               ret = regmap_read(map, sled->offset, &value);
+               if (ret < 0)
+                       return ret;
+               sled->state = !!(value & sled->mask);
+               break;
+       default:
+               ret = regmap_update_bits(map, sled->offset, sled->mask, 0);
+               if (ret < 0)
+                       return ret;
+               sled->state = false;
        }
        sled->cdev.brightness_set = syscon_led_set;
 
-       init_data.fwnode = of_fwnode_handle(np);
-
        ret = devm_led_classdev_register_ext(dev, &sled->cdev, &init_data);
        if (ret < 0)
                return ret;