Commit f55db1c7 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Pavel Machek
Browse files

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: 9a5c1c64 ("leds: lm3692x: Change DT calls to fwnode calls")
Cc: Dan Murphy <dmurphy@ti.com>
Signed-off-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarPavel Machek <pavel@ucw.cz>
parent e2e8e4e8
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -435,6 +435,7 @@ static int lm3692x_probe_dt(struct lm3692x_led *led)


	ret = fwnode_property_read_u32(child, "reg", &led->led_enable);
	ret = fwnode_property_read_u32(child, "reg", &led->led_enable);
	if (ret) {
	if (ret) {
		fwnode_handle_put(child);
		dev_err(&led->client->dev, "reg DT property missing\n");
		dev_err(&led->client->dev, "reg DT property missing\n");
		return ret;
		return ret;
	}
	}
@@ -449,12 +450,11 @@ static int lm3692x_probe_dt(struct lm3692x_led *led)


	ret = devm_led_classdev_register_ext(&led->client->dev, &led->led_dev,
	ret = devm_led_classdev_register_ext(&led->client->dev, &led->led_dev,
					     &init_data);
					     &init_data);
	if (ret) {
	if (ret)
		dev_err(&led->client->dev, "led register err: %d\n", ret);
		dev_err(&led->client->dev, "led register err: %d\n", ret);
		return ret;
	}


	return 0;
	fwnode_handle_put(init_data.fwnode);
	return ret;
}
}


static int lm3692x_probe(struct i2c_client *client,
static int lm3692x_probe(struct i2c_client *client,