diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-02-04 00:56:02 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-02-04 13:31:52 +0300 |
commit | a8bd42a97741aefa5942605fa87418fc8a6c4169 (patch) | |
tree | 1fa5d8f7469d632e3ceed41d8d2687bd35e0f1ab /drivers/regulator | |
parent | 7d245afa24b3ed911f6fd90079d70932ac5e5923 (diff) | |
download | linux-a8bd42a97741aefa5942605fa87418fc8a6c4169.tar.xz |
regulator: core: have _regulator_get() accept get_type argument
Instead of separate "exclusive" and "allow_dummy" arguments, that formed 3
valid combinations (normal, exclusive and optional) and an invalid one,
let's accept explicit "get_type", like we did in devm-managed code.
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator')
-rw-r--r-- | drivers/regulator/core.c | 23 | ||||
-rw-r--r-- | drivers/regulator/devres.c | 21 | ||||
-rw-r--r-- | drivers/regulator/internal.h | 10 |
3 files changed, 25 insertions, 29 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index b0ee068310c5..206c274c0003 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1580,14 +1580,19 @@ static int regulator_resolve_supply(struct regulator_dev *rdev) } /* Internal regulator request function */ -static struct regulator *_regulator_get(struct device *dev, const char *id, - bool exclusive, bool allow_dummy) +struct regulator *_regulator_get(struct device *dev, const char *id, + enum regulator_get_type get_type) { struct regulator_dev *rdev; struct regulator *regulator; const char *devname = NULL; int ret; + if (get_type >= MAX_GET_TYPE) { + dev_err(dev, "invalid type %d in %s\n", get_type, __func__); + return ERR_PTR(-EINVAL); + } + if (id == NULL) { pr_err("get() with no identifier\n"); return ERR_PTR(-EINVAL); @@ -1616,7 +1621,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, * Assume that a regulator is physically present and enabled * even if it isn't hooked up and just provide a dummy. */ - if (have_full_constraints() && allow_dummy) { + if (have_full_constraints() && get_type == NORMAL_GET) { pr_warn("%s supply %s not found, using dummy regulator\n", devname, id); @@ -1624,7 +1629,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, get_device(&rdev->dev); goto found; /* Don't log an error when called from regulator_get_optional() */ - } else if (!have_full_constraints() || exclusive) { + } else if (!have_full_constraints() || get_type == EXCLUSIVE_GET) { dev_warn(dev, "dummy supplies not allowed\n"); } @@ -1637,7 +1642,7 @@ found: return regulator; } - if (exclusive && rdev->open_count) { + if (get_type == EXCLUSIVE_GET && rdev->open_count) { regulator = ERR_PTR(-EBUSY); put_device(&rdev->dev); return regulator; @@ -1665,7 +1670,7 @@ found: } rdev->open_count++; - if (exclusive) { + if (get_type == EXCLUSIVE_GET) { rdev->exclusive = 1; ret = _regulator_is_enabled(rdev); @@ -1693,7 +1698,7 @@ found: */ struct regulator *regulator_get(struct device *dev, const char *id) { - return _regulator_get(dev, id, false, true); + return _regulator_get(dev, id, NORMAL_GET); } EXPORT_SYMBOL_GPL(regulator_get); @@ -1720,7 +1725,7 @@ EXPORT_SYMBOL_GPL(regulator_get); */ struct regulator *regulator_get_exclusive(struct device *dev, const char *id) { - return _regulator_get(dev, id, true, false); + return _regulator_get(dev, id, EXCLUSIVE_GET); } EXPORT_SYMBOL_GPL(regulator_get_exclusive); @@ -1746,7 +1751,7 @@ EXPORT_SYMBOL_GPL(regulator_get_exclusive); */ struct regulator *regulator_get_optional(struct device *dev, const char *id) { - return _regulator_get(dev, id, false, false); + return _regulator_get(dev, id, OPTIONAL_GET); } EXPORT_SYMBOL_GPL(regulator_get_optional); diff --git a/drivers/regulator/devres.c b/drivers/regulator/devres.c index 6ec1d400adae..965d1d31ec8c 100644 --- a/drivers/regulator/devres.c +++ b/drivers/regulator/devres.c @@ -19,12 +19,6 @@ #include "internal.h" -enum { - NORMAL_GET, - EXCLUSIVE_GET, - OPTIONAL_GET, -}; - static void devm_regulator_release(struct device *dev, void *res) { regulator_put(*(struct regulator **)res); @@ -39,20 +33,7 @@ static struct regulator *_devm_regulator_get(struct device *dev, const char *id, if (!ptr) return ERR_PTR(-ENOMEM); - switch (get_type) { - case NORMAL_GET: - regulator = regulator_get(dev, id); - break; - case EXCLUSIVE_GET: - regulator = regulator_get_exclusive(dev, id); - break; - case OPTIONAL_GET: - regulator = regulator_get_optional(dev, id); - break; - default: - regulator = ERR_PTR(-EINVAL); - } - + regulator = _regulator_get(dev, id, get_type); if (!IS_ERR(regulator)) { *ptr = regulator; devres_add(dev, ptr); diff --git a/drivers/regulator/internal.h b/drivers/regulator/internal.h index c74ac8734023..1dd575b28564 100644 --- a/drivers/regulator/internal.h +++ b/drivers/regulator/internal.h @@ -51,4 +51,14 @@ regulator_of_get_init_data(struct device *dev, } #endif +enum regulator_get_type { + NORMAL_GET, + EXCLUSIVE_GET, + OPTIONAL_GET, + MAX_GET_TYPE +}; + +struct regulator *_regulator_get(struct device *dev, const char *id, + enum regulator_get_type get_type); + #endif |