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:
Родитель
d33e98a1f3
Коммит
95138e0127
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче