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

leds: lm3692x: Put fwnode in any case during ->probe()

device_get_next_child_node() bumps a reference counting of a returned variable.
We have to balance it whenever we return to the caller.

Fixes: 9a5c1c64ac0a ("leds: lm3692x: Change DT calls to fwnode calls")
Cc: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Pavel Machek <pavel@ucw.cz>

authored by

Andy Shevchenko and committed by
Pavel Machek
f55db1c7 e2e8e4e8

+4 -4
+4 -4
drivers/leds/leds-lm3692x.c
··· 435 435 436 436 ret = fwnode_property_read_u32(child, "reg", &led->led_enable); 437 437 if (ret) { 438 + fwnode_handle_put(child); 438 439 dev_err(&led->client->dev, "reg DT property missing\n"); 439 440 return ret; 440 441 } ··· 450 449 451 450 ret = devm_led_classdev_register_ext(&led->client->dev, &led->led_dev, 452 451 &init_data); 453 - if (ret) { 452 + if (ret) 454 453 dev_err(&led->client->dev, "led register err: %d\n", ret); 455 - return ret; 456 - } 457 454 458 - return 0; 455 + fwnode_handle_put(init_data.fwnode); 456 + return ret; 459 457 } 460 458 461 459 static int lm3692x_probe(struct i2c_client *client,