[PATCH v1 04/11] regulator: core: Don't allow to get regulator until all couples resolved

2018-10-05 Thread Dmitry Osipenko
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 
---
 drivers/regulator/core.c | 10 ++
 1 file changed, 10 insertions(+)

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(_list_mutex);
+   ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled);
+   mutex_unlock(_list_mutex);
+
+   if (ret != 0) {
+   regulator = ERR_PTR(-EPROBE_DEFER);
+   put_device(>dev);
+   return regulator;
+   }
+
ret = regulator_resolve_supply(rdev);
if (ret < 0) {
regulator = ERR_PTR(ret);
-- 
2.19.0



[PATCH v1 04/11] regulator: core: Don't allow to get regulator until all couples resolved

2018-10-05 Thread Dmitry Osipenko
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 
---
 drivers/regulator/core.c | 10 ++
 1 file changed, 10 insertions(+)

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(_list_mutex);
+   ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled);
+   mutex_unlock(_list_mutex);
+
+   if (ret != 0) {
+   regulator = ERR_PTR(-EPROBE_DEFER);
+   put_device(>dev);
+   return regulator;
+   }
+
ret = regulator_resolve_supply(rdev);
if (ret < 0) {
regulator = ERR_PTR(ret);
-- 
2.19.0