From: Dmitry Osipenko Date: Fri, 5 Oct 2018 15:36:31 +0000 (+0300) Subject: regulator: core: Don't allow to get regulator until all couples resolved X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=79d6f049f4f05f5cb6e1647a9a253dad14bfabbe;p=openwrt%2Fstaging%2Fblogic.git 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 Signed-off-by: Mark Brown --- 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);