aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Murphy <dmurphy@ti.com>2018-07-02 14:12:14 -0400
committerJacek Anaszewski <jacek.anaszewski@gmail.com>2018-07-03 16:26:51 -0400
commit9a5c1c64ac0a4d01c78328283dac7a9dc33ff0f9 (patch)
treea5fac50ff77240d335c9cb598fdde11bd11d0848
parent43d20ff3633112322de38c18b4b35bbbf04438d7 (diff)
leds: lm3692x: Change DT calls to fwnode calls
Update the code to use the fwnode calls as opposed to ARM DT node api's. This allows the device to be used with either DT configurations or ACPI definitions. Signed-off-by: Dan Murphy <dmurphy@ti.com> Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
-rw-r--r--drivers/leds/leds-lm3692x.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/drivers/leds/leds-lm3692x.c b/drivers/leds/leds-lm3692x.c
index e518ae36f410..9e6432b6a3b5 100644
--- a/drivers/leds/leds-lm3692x.c
+++ b/drivers/leds/leds-lm3692x.c
@@ -267,30 +267,15 @@ out:
267static int lm3692x_probe(struct i2c_client *client, 267static int lm3692x_probe(struct i2c_client *client,
268 const struct i2c_device_id *id) 268 const struct i2c_device_id *id)
269{ 269{
270 int ret; 270 struct fwnode_handle *child = NULL;
271 struct lm3692x_led *led; 271 struct lm3692x_led *led;
272 struct device_node *np = client->dev.of_node;
273 struct device_node *child_node;
274 const char *name; 272 const char *name;
273 int ret;
275 274
276 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL); 275 led = devm_kzalloc(&client->dev, sizeof(*led), GFP_KERNEL);
277 if (!led) 276 if (!led)
278 return -ENOMEM; 277 return -ENOMEM;
279 278
280 for_each_available_child_of_node(np, child_node) {
281 led->led_dev.default_trigger = of_get_property(child_node,
282 "linux,default-trigger",
283 NULL);
284
285 ret = of_property_read_string(child_node, "label", &name);
286 if (!ret)
287 snprintf(led->label, sizeof(led->label),
288 "%s:%s", id->name, name);
289 else
290 snprintf(led->label, sizeof(led->label),
291 "%s::backlight_cluster", id->name);
292 };
293
294 led->enable_gpio = devm_gpiod_get_optional(&client->dev, 279 led->enable_gpio = devm_gpiod_get_optional(&client->dev,
295 "enable", GPIOD_OUT_LOW); 280 "enable", GPIOD_OUT_LOW);
296 if (IS_ERR(led->enable_gpio)) { 281 if (IS_ERR(led->enable_gpio)) {
@@ -323,6 +308,25 @@ static int lm3692x_probe(struct i2c_client *client,
323 if (ret) 308 if (ret)
324 return ret; 309 return ret;
325 310
311 child = device_get_next_child_node(&led->client->dev, child);
312 if (!child) {
313 dev_err(&led->client->dev, "No LED Child node\n");
314 return ret;
315 }
316
317 fwnode_property_read_string(child, "linux,default-trigger",
318 &led->led_dev.default_trigger);
319
320 ret = fwnode_property_read_string(child, "label", &name);
321 if (ret)
322 snprintf(led->label, sizeof(led->label),
323 "%s::", led->client->name);
324 else
325 snprintf(led->label, sizeof(led->label),
326 "%s:%s", led->client->name, name);
327
328 led->led_dev.dev->of_node = to_of_node(child);
329
326 ret = devm_led_classdev_register(&client->dev, &led->led_dev); 330 ret = devm_led_classdev_register(&client->dev, &led->led_dev);
327 if (ret) { 331 if (ret) {
328 dev_err(&client->dev, "led register err: %d\n", ret); 332 dev_err(&client->dev, "led register err: %d\n", ret);