Commit e1012160 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Pavel Machek

leds: el15203000: 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: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarPavel Machek <pavel@ucw.cz>
parent 95138e01
......@@ -245,16 +245,13 @@ static int el15203000_probe_dt(struct el15203000 *priv)
ret = fwnode_property_read_u32(child, "reg", &led->reg);
if (ret) {
dev_err(priv->dev, "LED without ID number");
fwnode_handle_put(child);
break;
goto err_child_out;
}
if (led->reg > U8_MAX) {
dev_err(priv->dev, "LED value %d is invalid", led->reg);
fwnode_handle_put(child);
return -EINVAL;
ret = -EINVAL;
goto err_child_out;
}
led->priv = priv;
......@@ -276,14 +273,16 @@ static int el15203000_probe_dt(struct el15203000 *priv)
dev_err(priv->dev,
"failed to register LED device %s, err %d",
led->ldev.name, ret);
fwnode_handle_put(child);
break;
goto err_child_out;
}
led++;
}
return 0;
err_child_out:
fwnode_handle_put(child);
return ret;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment