regulator: check that dummy regulator has been probed before using it
commit 2c7a50bec4958f1d1c84d19cde518d0e96a676fd upstream. Due to asynchronous driver probing there is a chance that the dummy regulator hasn't already been probed when first accessing it. Cc: stable@vger.kernel.org Signed-off-by: Christian Eggers <ceggers@arri.de> Link: https://patch.msgid.link/20250313103051.32430-3-ceggers@arri.de Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d3b83a1442
commit
a99f1254b1
@@ -2024,6 +2024,10 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
|
|||||||
|
|
||||||
if (have_full_constraints()) {
|
if (have_full_constraints()) {
|
||||||
r = dummy_regulator_rdev;
|
r = dummy_regulator_rdev;
|
||||||
|
if (!r) {
|
||||||
|
ret = -EPROBE_DEFER;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
get_device(&r->dev);
|
get_device(&r->dev);
|
||||||
} else {
|
} else {
|
||||||
dev_err(dev, "Failed to resolve %s-supply for %s\n",
|
dev_err(dev, "Failed to resolve %s-supply for %s\n",
|
||||||
@@ -2041,6 +2045,10 @@ static int regulator_resolve_supply(struct regulator_dev *rdev)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
r = dummy_regulator_rdev;
|
r = dummy_regulator_rdev;
|
||||||
|
if (!r) {
|
||||||
|
ret = -EPROBE_DEFER;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
get_device(&r->dev);
|
get_device(&r->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2166,8 +2174,10 @@ struct regulator *_regulator_get_common(struct regulator_dev *rdev, struct devic
|
|||||||
* enabled, even if it isn't hooked up, and just
|
* enabled, even if it isn't hooked up, and just
|
||||||
* provide a dummy.
|
* provide a dummy.
|
||||||
*/
|
*/
|
||||||
dev_warn(dev, "supply %s not found, using dummy regulator\n", id);
|
|
||||||
rdev = dummy_regulator_rdev;
|
rdev = dummy_regulator_rdev;
|
||||||
|
if (!rdev)
|
||||||
|
return ERR_PTR(-EPROBE_DEFER);
|
||||||
|
dev_warn(dev, "supply %s not found, using dummy regulator\n", id);
|
||||||
get_device(&rdev->dev);
|
get_device(&rdev->dev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user