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

leds: pca963x: use struct led_init_data when registering

By using struct led_init_data when registering we do not need to parse
`label` DT property. Moreover `label` is deprecated and if it is not
present but `color` and `function` are, LED core will compose a name
from these properties instead.

Previously if the `label` DT property was not present, the code composed
name for the LED in the form
"pca963x:%d:%.2x:%u"
For backwards compatibility we therefore set init_data->default_label
to this value so that the LED will not get a different name if `label`
property is not present, nor are `color` and `function`.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Cc: Peter Meerwald <p.meerwald@bct-electronic.com>
Cc: Ricardo Ribalda <ribalda@kernel.org>
Cc: Zahari Petkov <zahari@balena.io>
Signed-off-by: Pavel Machek <pavel@ucw.cz>

authored by

Marek Behún and committed by
Pavel Machek
564ead12 85fc8efe

+12 -13
+12 -13
drivers/leds/leds-pca963x.c
··· 289 289 struct pca963x_led *led = chip->leds; 290 290 struct device *dev = &client->dev; 291 291 struct fwnode_handle *child; 292 - const char *name; 293 - char label[64]; 294 292 bool hw_blink; 295 293 s32 mode2; 296 294 u32 reg; ··· 321 323 return ret; 322 324 323 325 device_for_each_child_node(dev, child) { 326 + struct led_init_data init_data = {}; 327 + char default_label[32]; 328 + 324 329 ret = fwnode_property_read_u32(child, "reg", &reg); 325 330 if (ret || reg >= chipdef->n_leds) { 326 331 dev_err(dev, "Invalid 'reg' property for node %pfw\n", ··· 332 331 goto err; 333 332 } 334 333 335 - ret = fwnode_property_read_string(child, "label", &name); 336 - if (!fwnode_property_read_string(child, "label", &name)) 337 - snprintf(label, sizeof(label), "pca963x:%s", name); 338 - else 339 - snprintf(label, sizeof(label), "pca963x::"); 340 - 341 - fwnode_property_read_string(child, "linux,default-trigger", 342 - &led->led_cdev.default_trigger); 343 - 344 334 led->led_num = reg; 345 335 led->chip = chip; 346 - led->led_cdev.name = label; 347 336 led->led_cdev.brightness_set_blocking = pca963x_led_set; 348 337 if (hw_blink) 349 338 led->led_cdev.blink_set = pca963x_blink_set; 350 339 351 - ret = devm_led_classdev_register(dev, &led->led_cdev); 340 + init_data.fwnode = child; 341 + /* for backwards compatibility */ 342 + init_data.devicename = "pca963x"; 343 + snprintf(default_label, sizeof(default_label), "%d:%.2x:%u", 344 + client->adapter->nr, client->addr, reg); 345 + init_data.default_label = default_label; 346 + 347 + ret = devm_led_classdev_register_ext(dev, &led->led_cdev, 348 + &init_data); 352 349 if (ret) { 353 350 dev_err(dev, "Failed to register LED for node %pfw\n", 354 351 child);