Skip to content

Commit a1d1241

Browse files
WeiFang-NXPbroonie
authored andcommitted
regulator: core: fix the broken behavior of regulator_dev_lookup()
The behavior of regulator_dev_lookup() for non-DT way has been broken since the commit b8c3255 ("regulator: Move OF-specific regulator lookup code to of_regulator.c"). Before the commit, of_get_regulator() was used to get the regulator, which returns NULL if the regulator is not found. So the regulator will be looked up through regulator_lookup_by_name() if no matching regulator is found in regulator_map_list. However, currently, of_regulator_dev_lookup() is used to instead of of_get_regulator(), but the variable 'r' is set to ERR_PTR(-ENODEV) instead of NULL if the regulator is not found. In this case, if no regulator is found in regulator_map_list, the variable 'r' is still ERR_PTR(-ENODEV), So regulator_dev_lookup() returns the value of 'r' directly instead of continuing to look up the regulator through regulator_lookup_by_name(). Fixes: b8c3255 ("regulator: Move OF-specific regulator lookup code to of_regulator.c") Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://patch.msgid.link/20240911120338.526384-1-wei.fang@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 5faf6da commit a1d1241

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

drivers/regulator/core.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,6 +1965,9 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
19651965
return r;
19661966
if (PTR_ERR(r) == -EPROBE_DEFER)
19671967
return r;
1968+
1969+
if (PTR_ERR(r) == -ENODEV)
1970+
r = NULL;
19681971
}
19691972

19701973
/* if not found, try doing it non-dt way */

0 commit comments

Comments
 (0)