leds: lp8860: Use generic support for composing LED names
Switch to using generic LED support for composing LED class device name. While at it, avoid iterating through available child of nodes in favor of obtaining single expected child node using single call to of_get_next_available_child(). Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> Acked-by: Pavel Machek <pavel@ucw.cz> Tested-by: Dan Murphy <dmurphy@ti.com>
This commit is contained in:
Родитель
0ec39e8cd8
Коммит
99ca0ea573
|
@ -18,7 +18,6 @@
|
|||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <uapi/linux/uleds.h>
|
||||
|
||||
#define LP8860_DISP_CL1_BRT_MSB 0x00
|
||||
#define LP8860_DISP_CL1_BRT_LSB 0x01
|
||||
|
@ -83,6 +82,8 @@
|
|||
|
||||
#define LP8860_CLEAR_FAULTS 0x01
|
||||
|
||||
#define LP8860_NAME "lp8860"
|
||||
|
||||
/**
|
||||
* struct lp8860_led -
|
||||
* @lock - Lock for reading/writing the device
|
||||
|
@ -92,7 +93,6 @@
|
|||
* @eeprom_regmap - EEPROM register map
|
||||
* @enable_gpio - VDDIO/EN gpio to enable communication interface
|
||||
* @regulator - LED supply regulator pointer
|
||||
* @label - LED label
|
||||
*/
|
||||
struct lp8860_led {
|
||||
struct mutex lock;
|
||||
|
@ -102,7 +102,6 @@ struct lp8860_led {
|
|||
struct regmap *eeprom_regmap;
|
||||
struct gpio_desc *enable_gpio;
|
||||
struct regulator *regulator;
|
||||
char label[LED_MAX_NAME_SIZE];
|
||||
};
|
||||
|
||||
struct lp8860_eeprom_reg {
|
||||
|
@ -383,26 +382,20 @@ static int lp8860_probe(struct i2c_client *client,
|
|||
struct lp8860_led *led;
|
||||
struct device_node *np = client->dev.of_node;
|
||||
struct device_node *child_node;
|
||||
const char *name;
|
||||
struct led_init_data init_data = {};
|
||||
|
||||
led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
for_each_available_child_of_node(np, child_node) {
|
||||
child_node = of_get_next_available_child(np, NULL);
|
||||
if (!child_node)
|
||||
return -EINVAL;
|
||||
|
||||
led->led_dev.default_trigger = of_get_property(child_node,
|
||||
"linux,default-trigger",
|
||||
NULL);
|
||||
|
||||
ret = of_property_read_string(child_node, "label", &name);
|
||||
if (!ret)
|
||||
snprintf(led->label, sizeof(led->label), "%s:%s",
|
||||
id->name, name);
|
||||
else
|
||||
snprintf(led->label, sizeof(led->label),
|
||||
"%s::display_cluster", id->name);
|
||||
}
|
||||
|
||||
led->enable_gpio = devm_gpiod_get_optional(&client->dev,
|
||||
"enable", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(led->enable_gpio)) {
|
||||
|
@ -416,7 +409,6 @@ static int lp8860_probe(struct i2c_client *client,
|
|||
led->regulator = NULL;
|
||||
|
||||
led->client = client;
|
||||
led->led_dev.name = led->label;
|
||||
led->led_dev.brightness_set_blocking = lp8860_brightness_set;
|
||||
|
||||
mutex_init(&led->lock);
|
||||
|
@ -443,7 +435,12 @@ static int lp8860_probe(struct i2c_client *client,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = devm_led_classdev_register(&client->dev, &led->led_dev);
|
||||
init_data.fwnode = of_fwnode_handle(child_node);
|
||||
init_data.devicename = LP8860_NAME;
|
||||
init_data.default_label = ":display_cluster";
|
||||
|
||||
ret = devm_led_classdev_register_ext(&client->dev, &led->led_dev,
|
||||
&init_data);
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "led register err: %d\n", ret);
|
||||
return ret;
|
||||
|
|
Загрузка…
Ссылка в новой задаче