leds: bcm6328: Get rid of custom led_init_default_state_get()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 3 Jan 2023 13:12:49 +0000 (15:12 +0200)
committerLee Jones <lee@kernel.org>
Mon, 30 Jan 2023 08:03:37 +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>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230103131256.33894-5-andriy.shevchenko@linux.intel.com
drivers/leds/leds-bcm6328.c

index 2d4d879..246f129 100644 (file)
@@ -330,7 +330,9 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
 {
        struct led_init_data init_data = {};
        struct bcm6328_led *led;
-       const char *state;
+       enum led_default_state state;
+       unsigned long val, shift;
+       void __iomem *mode;
        int rc;
 
        led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
@@ -346,31 +348,29 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
        if (of_property_read_bool(nc, "active-low"))
                led->active_low = true;
 
-       if (!of_property_read_string(nc, "default-state", &state)) {
-               if (!strcmp(state, "on")) {
+       init_data.fwnode = of_fwnode_handle(nc);
+
+       state = led_init_default_state_get(init_data.fwnode);
+       switch (state) {
+       case LEDS_DEFSTATE_ON:
+               led->cdev.brightness = LED_FULL;
+               break;
+       case LEDS_DEFSTATE_KEEP:
+               shift = bcm6328_pin2shift(led->pin);
+               if (shift / 16)
+                       mode = mem + BCM6328_REG_MODE_HI;
+               else
+                       mode = mem + BCM6328_REG_MODE_LO;
+
+               val = bcm6328_led_read(mode) >> BCM6328_LED_SHIFT(shift % 16);
+               val &= BCM6328_LED_MODE_MASK;
+               if ((led->active_low && val == BCM6328_LED_MODE_OFF) ||
+                   (!led->active_low && val == BCM6328_LED_MODE_ON))
                        led->cdev.brightness = LED_FULL;
-               } else if (!strcmp(state, "keep")) {
-                       void __iomem *mode;
-                       unsigned long val, shift;
-
-                       shift = bcm6328_pin2shift(led->pin);
-                       if (shift / 16)
-                               mode = mem + BCM6328_REG_MODE_HI;
-                       else
-                               mode = mem + BCM6328_REG_MODE_LO;
-
-                       val = bcm6328_led_read(mode) >>
-                             BCM6328_LED_SHIFT(shift % 16);
-                       val &= BCM6328_LED_MODE_MASK;
-                       if ((led->active_low && val == BCM6328_LED_MODE_OFF) ||
-                           (!led->active_low && val == BCM6328_LED_MODE_ON))
-                               led->cdev.brightness = LED_FULL;
-                       else
-                               led->cdev.brightness = LED_OFF;
-               } else {
+               else
                        led->cdev.brightness = LED_OFF;
-               }
-       } else {
+               break;
+       default:
                led->cdev.brightness = LED_OFF;
        }
 
@@ -378,7 +378,6 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
 
        led->cdev.brightness_set = bcm6328_led_set;
        led->cdev.blink_set = bcm6328_blink_set;
-       init_data.fwnode = of_fwnode_handle(nc);
 
        rc = devm_led_classdev_register_ext(dev, &led->cdev, &init_data);
        if (rc < 0)