From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752836AbdBCV52 (ORCPT ); Fri, 3 Feb 2017 16:57:28 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:36561 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752647AbdBCV4I (ORCPT ); Fri, 3 Feb 2017 16:56:08 -0500 From: Dmitry Torokhov To: Mark Brown Cc: Liam Girdwood , linux-kernel@vger.kernel.org Subject: [PATCH 3/5] regulator: core: have _regulator_get() accept get_type argument Date: Fri, 3 Feb 2017 13:56:02 -0800 Message-Id: <20170203215604.23285-3-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog In-Reply-To: <20170203215604.23285-1-dmitry.torokhov@gmail.com> References: <20170203215604.23285-1-dmitry.torokhov@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/regulator/core.c | 23 ++++++++++++++--------- drivers/regulator/devres.c | 21 +-------------------- 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 25aca2096ac9..e495767fee85 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); @@ -1617,7 +1622,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); @@ -1625,7 +1630,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"); } @@ -1638,7 +1643,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, 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; @@ -1666,7 +1671,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, } rdev->open_count++; - if (exclusive) { + if (get_type == EXCLUSIVE_GET) { rdev->exclusive = 1; ret = _regulator_is_enabled(rdev); @@ -1694,7 +1699,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, */ 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); @@ -1721,7 +1726,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); @@ -1747,7 +1752,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 -- 2.11.0.483.g087da7b7c-goog