leds: pwm: Make error handling more robust

It's easy to miss necessary clean up, e.g. firmware node reference counting,
during error path in ->probe(). Make it more robust by moving to a single
point of return.

Signed-off-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
This commit is contained in:
Andy Shevchenko 2021-05-10 12:50:43 +03:00 committed by Pavel Machek
parent d33e98a1f3
commit 95138e0127
1 changed files with 9 additions and 7 deletions

View File

@ -101,7 +101,7 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
{
struct fwnode_handle *fwnode;
struct led_pwm led;
int ret = 0;
int ret;
memset(&led, 0, sizeof(led));
@ -111,8 +111,8 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
led.name = to_of_node(fwnode)->name;
if (!led.name) {
fwnode_handle_put(fwnode);
return -EINVAL;
ret = EINVAL;
goto err_child_out;
}
led.active_low = fwnode_property_read_bool(fwnode,
@ -121,12 +121,14 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
&led.max_brightness);
ret = led_pwm_add(dev, priv, &led, fwnode);
if (ret) {
fwnode_handle_put(fwnode);
break;
}
if (ret)
goto err_child_out;
}
return 0;
err_child_out:
fwnode_handle_put(fwnode);
return ret;
}