Skip to content

Commit 67d162e

Browse files
andy-shevlag-linaro
authored andcommitted
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 <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Lee Jones <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 5ff422a commit 67d162e

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

drivers/leds/leds-bcm6328.c

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,9 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
330330
{
331331
struct led_init_data init_data = {};
332332
struct bcm6328_led *led;
333-
const char *state;
333+
enum led_default_state state;
334+
unsigned long val, shift;
335+
void __iomem *mode;
334336
int rc;
335337

336338
led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL);
@@ -346,39 +348,36 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
346348
if (of_property_read_bool(nc, "active-low"))
347349
led->active_low = true;
348350

349-
if (!of_property_read_string(nc, "default-state", &state)) {
350-
if (!strcmp(state, "on")) {
351+
init_data.fwnode = of_fwnode_handle(nc);
352+
353+
state = led_init_default_state_get(init_data.fwnode);
354+
switch (state) {
355+
case LEDS_DEFSTATE_ON:
356+
led->cdev.brightness = LED_FULL;
357+
break;
358+
case LEDS_DEFSTATE_KEEP:
359+
shift = bcm6328_pin2shift(led->pin);
360+
if (shift / 16)
361+
mode = mem + BCM6328_REG_MODE_HI;
362+
else
363+
mode = mem + BCM6328_REG_MODE_LO;
364+
365+
val = bcm6328_led_read(mode) >> 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))
351369
led->cdev.brightness = LED_FULL;
352-
} else if (!strcmp(state, "keep")) {
353-
void __iomem *mode;
354-
unsigned long val, shift;
355-
356-
shift = bcm6328_pin2shift(led->pin);
357-
if (shift / 16)
358-
mode = mem + BCM6328_REG_MODE_HI;
359-
else
360-
mode = mem + BCM6328_REG_MODE_LO;
361-
362-
val = bcm6328_led_read(mode) >>
363-
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))
367-
led->cdev.brightness = LED_FULL;
368-
else
369-
led->cdev.brightness = LED_OFF;
370-
} else {
370+
else
371371
led->cdev.brightness = LED_OFF;
372-
}
373-
} else {
372+
break;
373+
default:
374374
led->cdev.brightness = LED_OFF;
375375
}
376376

377377
bcm6328_led_set(&led->cdev, led->cdev.brightness);
378378

379379
led->cdev.brightness_set = bcm6328_led_set;
380380
led->cdev.blink_set = bcm6328_blink_set;
381-
init_data.fwnode = of_fwnode_handle(nc);
382381

383382
rc = devm_led_classdev_register_ext(dev, &led->cdev, &init_data);
384383
if (rc < 0)

0 commit comments

Comments
 (0)