From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752791AbdBCV4g (ORCPT ); Fri, 3 Feb 2017 16:56:36 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:36770 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752710AbdBCV4K (ORCPT ); Fri, 3 Feb 2017 16:56:10 -0500 From: Dmitry Torokhov To: Mark Brown Cc: Liam Girdwood , linux-kernel@vger.kernel.org Subject: [PATCH 4/5] regulator: core: simplify _regulator_get() Date: Fri, 3 Feb 2017 13:56:03 -0800 Message-Id: <20170203215604.23285-4-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 The code in _regulator_get() got a bit confusing over time, with control flow jumping to a label from couple of places. Let's untangle it a bit. Signed-off-by: Dmitry Torokhov --- drivers/regulator/core.c | 66 +++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index e495767fee85..e39bb2d41038 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -1585,7 +1585,7 @@ struct regulator *_regulator_get(struct device *dev, const char *id, { struct regulator_dev *rdev; struct regulator *regulator; - const char *devname = NULL; + const char *devname = dev ? dev_name(dev) : "deviceless"; int ret; if (get_type >= MAX_GET_TYPE) { @@ -1598,45 +1598,47 @@ struct regulator *_regulator_get(struct device *dev, const char *id, return ERR_PTR(-EINVAL); } - if (dev) - devname = dev_name(dev); - rdev = regulator_dev_lookup(dev, id); - if (!IS_ERR(rdev)) - goto found; + if (IS_ERR(rdev)) { + ret = PTR_ERR(rdev); - ret = PTR_ERR(rdev); - regulator = ERR_PTR(ret); + /* + * If regulator_dev_lookup() fails with error other + * than -ENODEV our job here is done, we simply return it. + */ + if (ret != -ENODEV) + return ERR_PTR(ret); - /* - * If we have return value from dev_lookup fail, we do not expect to - * succeed, so, quit with appropriate error value - */ - if (ret && ret != -ENODEV) - return regulator; + if (!have_full_constraints()) { + dev_warn(dev, + "incomplete constraints, dummy supplies not allowed\n"); + return ERR_PTR(-ENODEV); + } - if (!devname) - devname = "deviceless"; + switch (get_type) { + case NORMAL_GET: + /* + * Assume that a regulator is physically present and + * enabled, even if it isn't hooked up, and just + * provide a dummy. + */ + dev_warn(dev, + "%s supply %s not found, using dummy regulator\n", + devname, id); + rdev = dummy_regulator_rdev; + get_device(&rdev->dev); + break; - /* - * 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() && get_type == NORMAL_GET) { - pr_warn("%s supply %s not found, using dummy regulator\n", - devname, id); + case EXCLUSIVE_GET: + dev_warn(dev, + "dummy supplies not allowed for exclusive requests\n"); + /* fall through */ - rdev = dummy_regulator_rdev; - get_device(&rdev->dev); - goto found; - /* Don't log an error when called from regulator_get_optional() */ - } else if (!have_full_constraints() || get_type == EXCLUSIVE_GET) { - dev_warn(dev, "dummy supplies not allowed\n"); + default: + return ERR_PTR(-ENODEV); + } } - return regulator; - -found: if (rdev->exclusive) { regulator = ERR_PTR(-EPERM); put_device(&rdev->dev); -- 2.11.0.483.g087da7b7c-goog