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:
Christian Eggers 2025-03-13 11:27:39 +01:00 committed by Greg Kroah-Hartman
parent 83387073e5
commit 270fe5c090

View File

@ -2091,6 +2091,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",
@ -2108,6 +2112,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);
} }
@ -2216,8 +2224,10 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
* 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;