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:
Родитель
1a695a905c
Коммит
842a882427
|
@ -395,12 +395,6 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||
struct act8865_regulator_data *regulator;
|
||||
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) {
|
||||
case ACT8600:
|
||||
matches = act8600_matches;
|
||||
|
@ -419,6 +413,12 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||
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);
|
||||
of_node_put(np);
|
||||
if (matched <= 0)
|
||||
|
|
Загрузка…
Ссылка в новой задаче