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

leds: syscon: 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>
Signed-off-by: Lee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230103131256.33894-11-andriy.shevchenko@linux.intel.com

authored by

Andy Shevchenko and committed by
Lee Jones
265d313e bf8a9a76

+22 -25
+22 -25
drivers/leds/leds-syscon.c
··· 61 61 struct device *parent; 62 62 struct regmap *map; 63 63 struct syscon_led *sled; 64 - const char *state; 64 + enum led_default_state state; 65 + u32 value; 65 66 int ret; 66 67 67 68 parent = dev->parent; ··· 87 86 if (of_property_read_u32(np, "mask", &sled->mask)) 88 87 return -EINVAL; 89 88 90 - state = of_get_property(np, "default-state", NULL); 91 - if (state) { 92 - if (!strcmp(state, "keep")) { 93 - u32 val; 89 + init_data.fwnode = of_fwnode_handle(np); 94 90 95 - ret = regmap_read(map, sled->offset, &val); 96 - if (ret < 0) 97 - return ret; 98 - sled->state = !!(val & sled->mask); 99 - } else if (!strcmp(state, "on")) { 100 - sled->state = true; 101 - ret = regmap_update_bits(map, sled->offset, 102 - sled->mask, 103 - sled->mask); 104 - if (ret < 0) 105 - return ret; 106 - } else { 107 - sled->state = false; 108 - ret = regmap_update_bits(map, sled->offset, 109 - sled->mask, 0); 110 - if (ret < 0) 111 - return ret; 112 - } 91 + state = led_init_default_state_get(init_data.fwnode); 92 + switch (state) { 93 + case LEDS_DEFSTATE_ON: 94 + ret = regmap_update_bits(map, sled->offset, sled->mask, sled->mask); 95 + if (ret < 0) 96 + return ret; 97 + sled->state = true; 98 + break; 99 + case LEDS_DEFSTATE_KEEP: 100 + ret = regmap_read(map, sled->offset, &value); 101 + if (ret < 0) 102 + return ret; 103 + sled->state = !!(value & sled->mask); 104 + break; 105 + default: 106 + ret = regmap_update_bits(map, sled->offset, sled->mask, 0); 107 + if (ret < 0) 108 + return ret; 109 + sled->state = false; 113 110 } 114 111 sled->cdev.brightness_set = syscon_led_set; 115 - 116 - init_data.fwnode = of_fwnode_handle(np); 117 112 118 113 ret = devm_led_classdev_register_ext(dev, &sled->cdev, &init_data); 119 114 if (ret < 0)