diff options
author | Dmitry Osipenko <digetx@gmail.com> | 2018-10-05 17:36:31 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2018-11-08 13:41:10 +0100 |
commit | 79d6f049f4f05f5cb6e1647a9a253dad14bfabbe (patch) | |
tree | 65f5c35a2604a0492508b57c35ba56220f4745b6 /drivers/regulator | |
parent | regulator: core: Mutually resolve regulators coupling (diff) | |
download | linux-79d6f049f4f05f5cb6e1647a9a253dad14bfabbe.tar.xz linux-79d6f049f4f05f5cb6e1647a9a253dad14bfabbe.zip |
regulator: core: Don't allow to get regulator until all couples resolved
Don't allow to get regulator until all of its couples resolved because
consumer will get EPERM and coupling shall be transparent for the drivers.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 925df9e6f1e3..089e8ad8ef57 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1747,6 +1747,16 @@ struct regulator *_regulator_get(struct device *dev, const char *id, return regulator; } + mutex_lock(®ulator_list_mutex); + ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled); + mutex_unlock(®ulator_list_mutex); + + if (ret != 0) { + regulator = ERR_PTR(-EPROBE_DEFER); + put_device(&rdev->dev); + return regulator; + } + ret = regulator_resolve_supply(rdev); if (ret < 0) { regulator = ERR_PTR(ret); |