Commit e4ead3cd authored by Kory Maincent's avatar Kory Maincent Committed by Mark Brown

regulator: core: Propagate the regulator state in case of exclusive get

Previously, performing an exclusive get on an already-enabled regulator
resulted in inconsistent state initialization between child and parent
regulators. While the child's counts were updated, its parent's counters
remained unaffected.

Consequently, attempting to disable an already-enabled exclusive regulator
triggered unbalanced disables warnings from its parent regulator.

This commit addresses the issue by propagating the enable state to the
parent regulator using a regulator_enable call. This ensures consistent
state management across the regulator hierarchy, preventing warnings!
Signed-off-by: default avatarKory Maincent <kory.maincent@bootlin.com>
Link: https://msgid.link/r/20240312091638.1266167-1-kory.maincent@bootlin.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent e6f0b08a
......@@ -2274,6 +2274,17 @@ struct regulator *_regulator_get(struct device *dev, const char *id,
if (ret > 0) {
rdev->use_count = 1;
regulator->enable_count = 1;
/* Propagate the regulator state to its supply */
if (rdev->supply) {
ret = regulator_enable(rdev->supply);
if (ret < 0) {
destroy_regulator(regulator);
module_put(rdev->owner);
put_device(&rdev->dev);
return ERR_PTR(ret);
}
}
} else {
rdev->use_count = 0;
regulator->enable_count = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment