hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/leds/leds-lp8860.c
....@@ -1,14 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * TI LP8860 4-Channel LED Driver
34 *
45 * Copyright (C) 2014 Texas Instruments
56 *
67 * Author: Dan Murphy <dmurphy@ti.com>
7
- *
8
- * This program is free software; you can redistribute it and/or
9
- * modify it under the terms of the GNU General Public License
10
- * version 2 as published by the Free Software Foundation.
11
- *
128 */
139
1410 #include <linux/i2c.h>
....@@ -22,7 +18,6 @@
2218 #include <linux/of_gpio.h>
2319 #include <linux/gpio/consumer.h>
2420 #include <linux/slab.h>
25
-#include <uapi/linux/uleds.h>
2621
2722 #define LP8860_DISP_CL1_BRT_MSB 0x00
2823 #define LP8860_DISP_CL1_BRT_LSB 0x01
....@@ -87,6 +82,8 @@
8782
8883 #define LP8860_CLEAR_FAULTS 0x01
8984
85
+#define LP8860_NAME "lp8860"
86
+
9087 /**
9188 * struct lp8860_led -
9289 * @lock - Lock for reading/writing the device
....@@ -96,7 +93,6 @@
9693 * @eeprom_regmap - EEPROM register map
9794 * @enable_gpio - VDDIO/EN gpio to enable communication interface
9895 * @regulator - LED supply regulator pointer
99
- * @label - LED label
10096 */
10197 struct lp8860_led {
10298 struct mutex lock;
....@@ -106,7 +102,6 @@
106102 struct regmap *eeprom_regmap;
107103 struct gpio_desc *enable_gpio;
108104 struct regulator *regulator;
109
- char label[LED_MAX_NAME_SIZE];
110105 };
111106
112107 struct lp8860_eeprom_reg {
....@@ -385,27 +380,17 @@
385380 {
386381 int ret;
387382 struct lp8860_led *led;
388
- struct device_node *np = client->dev.of_node;
383
+ struct device_node *np = dev_of_node(&client->dev);
389384 struct device_node *child_node;
390
- const char *name;
385
+ struct led_init_data init_data = {};
391386
392387 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
393388 if (!led)
394389 return -ENOMEM;
395390
396
- for_each_available_child_of_node(np, child_node) {
397
- led->led_dev.default_trigger = of_get_property(child_node,
398
- "linux,default-trigger",
399
- NULL);
400
-
401
- ret = of_property_read_string(child_node, "label", &name);
402
- if (!ret)
403
- snprintf(led->label, sizeof(led->label), "%s:%s",
404
- id->name, name);
405
- else
406
- snprintf(led->label, sizeof(led->label),
407
- "%s::display_cluster", id->name);
408
- }
391
+ child_node = of_get_next_available_child(np, NULL);
392
+ if (!child_node)
393
+ return -EINVAL;
409394
410395 led->enable_gpio = devm_gpiod_get_optional(&client->dev,
411396 "enable", GPIOD_OUT_LOW);
....@@ -420,7 +405,6 @@
420405 led->regulator = NULL;
421406
422407 led->client = client;
423
- led->led_dev.name = led->label;
424408 led->led_dev.brightness_set_blocking = lp8860_brightness_set;
425409
426410 mutex_init(&led->lock);
....@@ -447,7 +431,12 @@
447431 if (ret)
448432 return ret;
449433
450
- ret = devm_led_classdev_register(&client->dev, &led->led_dev);
434
+ init_data.fwnode = of_fwnode_handle(child_node);
435
+ init_data.devicename = LP8860_NAME;
436
+ init_data.default_label = ":display_cluster";
437
+
438
+ ret = devm_led_classdev_register_ext(&client->dev, &led->led_dev,
439
+ &init_data);
451440 if (ret) {
452441 dev_err(&client->dev, "led register err: %d\n", ret);
453442 return ret;