Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

leds: bcm6328: Get rid of custom led_init_default_state_get()

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

authored by

Andy Shevchenko and committed by
Lee Jones
67d162e8 5ff422a7

+24 -25
+24 -25
drivers/leds/leds-bcm6328.c
··· 330 330 { 331 331 struct led_init_data init_data = {}; 332 332 struct bcm6328_led *led; 333 - const char *state; 333 + enum led_default_state state; 334 + unsigned long val, shift; 335 + void __iomem *mode; 334 336 int rc; 335 337 336 338 led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL); ··· 348 346 if (of_property_read_bool(nc, "active-low")) 349 347 led->active_low = true; 350 348 351 - if (!of_property_read_string(nc, "default-state", &state)) { 352 - if (!strcmp(state, "on")) { 349 + init_data.fwnode = of_fwnode_handle(nc); 350 + 351 + state = led_init_default_state_get(init_data.fwnode); 352 + switch (state) { 353 + case LEDS_DEFSTATE_ON: 354 + led->cdev.brightness = LED_FULL; 355 + break; 356 + case LEDS_DEFSTATE_KEEP: 357 + shift = bcm6328_pin2shift(led->pin); 358 + if (shift / 16) 359 + mode = mem + BCM6328_REG_MODE_HI; 360 + else 361 + mode = mem + BCM6328_REG_MODE_LO; 362 + 363 + val = bcm6328_led_read(mode) >> BCM6328_LED_SHIFT(shift % 16); 364 + val &= BCM6328_LED_MODE_MASK; 365 + if ((led->active_low && val == BCM6328_LED_MODE_OFF) || 366 + (!led->active_low && val == BCM6328_LED_MODE_ON)) 353 367 led->cdev.brightness = LED_FULL; 354 - } else if (!strcmp(state, "keep")) { 355 - void __iomem *mode; 356 - unsigned long val, shift; 357 - 358 - shift = bcm6328_pin2shift(led->pin); 359 - if (shift / 16) 360 - mode = mem + BCM6328_REG_MODE_HI; 361 - else 362 - mode = mem + BCM6328_REG_MODE_LO; 363 - 364 - val = bcm6328_led_read(mode) >> 365 - BCM6328_LED_SHIFT(shift % 16); 366 - val &= BCM6328_LED_MODE_MASK; 367 - if ((led->active_low && val == BCM6328_LED_MODE_OFF) || 368 - (!led->active_low && val == BCM6328_LED_MODE_ON)) 369 - led->cdev.brightness = LED_FULL; 370 - else 371 - led->cdev.brightness = LED_OFF; 372 - } else { 368 + else 373 369 led->cdev.brightness = LED_OFF; 374 - } 375 - } else { 370 + break; 371 + default: 376 372 led->cdev.brightness = LED_OFF; 377 373 } 378 374 ··· 378 378 379 379 led->cdev.brightness_set = bcm6328_led_set; 380 380 led->cdev.blink_set = bcm6328_blink_set; 381 - init_data.fwnode = of_fwnode_handle(nc); 382 381 383 382 rc = devm_led_classdev_register_ext(dev, &led->cdev, &init_data); 384 383 if (rc < 0)