regulator: act8865: Fix missing of_node_put() in act8865_pdata_from_dt()
This node pointer is returned by of_get_child_by_name() with refcount incremented in this function. of_node_put() is missing when exitting this function while invalid device type. Fix it by move of_get_child_by_name() code after device type check. Found by Coccinelle. Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
1a695a905c
commit
842a882427
@ -395,12 +395,6 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||||||
struct act8865_regulator_data *regulator;
|
struct act8865_regulator_data *regulator;
|
||||||
struct of_regulator_match *matches;
|
struct of_regulator_match *matches;
|
||||||
|
|
||||||
np = of_get_child_by_name(dev->of_node, "regulators");
|
|
||||||
if (!np) {
|
|
||||||
dev_err(dev, "missing 'regulators' subnode in DT\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case ACT8600:
|
case ACT8600:
|
||||||
matches = act8600_matches;
|
matches = act8600_matches;
|
||||||
@ -419,6 +413,12 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
np = of_get_child_by_name(dev->of_node, "regulators");
|
||||||
|
if (!np) {
|
||||||
|
dev_err(dev, "missing 'regulators' subnode in DT\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
matched = of_regulator_match(dev, np, matches, num_matches);
|
matched = of_regulator_match(dev, np, matches, num_matches);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (matched <= 0)
|
if (matched <= 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user