Received: by 10.192.165.156 with SMTP id m28csp773211imm; Tue, 17 Apr 2018 20:33:18 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+7gbh4xPUcC1qVynfhioCCd/L0BUEz+KbSuRtScfxHNG6SzJKrU2AiAgQBn3UGabuE+cTC X-Received: by 10.99.104.200 with SMTP id d191mr367943pgc.7.1524022398592; Tue, 17 Apr 2018 20:33:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524022398; cv=none; d=google.com; s=arc-20160816; b=JvyqVGKy7J8pgcGgQ/+9GQIqHHw9CLTA1DbiFxQ+LvKXnzWIcGWKLTcI7+/ulNId2s AOOuOy7Pjzbr1yigZJISSpgNRoicKBTG+0Dj7Po0IjKJ+6qIohaGSxK3L6GWWwc21IO0 u9lJ6i6wJzpjbdplx+O4kUbfME+zJtuuJDf3nUazsGqrjH7/jBqHUQweD4s0tKUWYcKR TSQFkxjdsVmQrK5IhkXMQRwcxd7aDSNYic69tWMFwe6hlh+G7VOAuzsTcwW5oyXO83yC xCWMooryQrLiIxTdfYcxxJY7rDGvkBiONKioO3pbSAA5dCEa9K1SXlAp4h0ly3Zj/sZN bImw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=Hrt8paZPoUWZTQ9C2QnZ3nhsFm8X2DcnYI3biPoyuig=; b=CYYrDYBEeaTybD95zbfMrKsS05c9Zf9bgryBo4pe6y54+sG3jraPjKZ/yqZJRfLAeJ BRyrulCzpUPSGFBpx21HTmuW8cF6DrXiX/7pv+15jmNbWshY4DlYO3CXZzPG/Hrqc1vf aUUsW2uno0V2sjvnWNZIadBJw8XFHAzxdL1Ogqtd44SXaWt8elaTxb7iBjfsP53puCDS BuVFRguO2FI3K0aJ+jZ83tIXTbXRVKZJK0E3ZI3sc8zu/HOpKxBZyLtt2R/rq7Kqa8ID jUmroCsOhvsos8f5tHOKLtdNG5Jgcdctj9D/hvUnMPliXGL4+SntbW8zHEBjirKlRtnK pdSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=mPVz1H87; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j8-v6si338007pli.9.2018.04.17.20.33.03; Tue, 17 Apr 2018 20:33:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=mPVz1H87; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753525AbeDRDb5 (ORCPT + 99 others); Tue, 17 Apr 2018 23:31:57 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:36301 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753002AbeDRDb4 (ORCPT ); Tue, 17 Apr 2018 23:31:56 -0400 Received: by mail-pg0-f67.google.com with SMTP id i6so196825pgv.3 for ; Tue, 17 Apr 2018 20:31:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id; bh=Hrt8paZPoUWZTQ9C2QnZ3nhsFm8X2DcnYI3biPoyuig=; b=mPVz1H87YFfNjEZIOcE4SQZ3fTSst9NYy3u0bxJagurX2awf0Q1UJeNwfwHppV+GRH ADFTa/rXDtEy68+bdkJHvNzE0Z5gTlBaeEDWuaoRe1siefHoBcYQAM4DiccQSacXyO3s w6TiwB6QJsGOuG7Rgi5guuPrAVBloNgHTdwOM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Hrt8paZPoUWZTQ9C2QnZ3nhsFm8X2DcnYI3biPoyuig=; b=LXCODPMlmBUSFE+XtDt1lXe0Bk2VvkNmZscuYDWg7feZUdUCcKDlE0IhyTh0rWCQEh hvbMHf5r3rVv8vwEsUig6GRffG/wZiG223WkHJwDyhezJVpYOfpXisw8BxSvzU2o42fD 5+qeNEoga1MP2XrQ3AVdCUHnQj9zl8c3ZKgh03zOCnf+8H5TLnU2i7rdxbrnVaspwuXQ uUAo/TkR5waXCeWoh7+61IaBEQGmJK1ozvEu7U7B5S5oKUBfDq4UZ6BKtaCbdBOw6YWp xo6SP5FS7ANGDMPI9/49OXQglG2jLPLvq9QNynN8il82Nt7sFVrdOJMokDGEFSUt3Hfw DTUg== X-Gm-Message-State: ALQs6tCRxRbenQE5ZYfbxbW+QsAzmSe0XBolHKokQUeMVmbXweMn2ys2 QDk4pgI6bSU66e1yUsQn53m+Uw== X-Received: by 10.98.236.4 with SMTP id k4mr426053pfh.240.1524022315534; Tue, 17 Apr 2018 20:31:55 -0700 (PDT) Received: from tictac2.mtv.corp.google.com ([2620:0:1000:1511:bde7:107f:fd5:44c8]) by smtp.gmail.com with ESMTPSA id b17sm313921pgu.63.2018.04.17.20.31.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Apr 2018 20:31:54 -0700 (PDT) From: Douglas Anderson To: broonie@kernel.org Cc: David Collins , Javier Martinez Canillas , evgreen@chromium.org, swboyd@chromium.org, Douglas Anderson , linux-omap@vger.kernel.org, Liam Girdwood , Tony Lindgren , linux-kernel@vger.kernel.org Subject: [PATCH v2] regulator: Don't return or expect -errno from of_map_mode() Date: Tue, 17 Apr 2018 20:31:43 -0700 Message-Id: <20180418033143.208986-1-dianders@chromium.org> X-Mailer: git-send-email 2.17.0.484.g0c8726318c-goog Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In of_get_regulation_constraints() we were taking the result of of_map_mode() (an unsigned int) and assigning it to an int. We were then checking whether this value was -EINVAL. Some implementers of of_map_mode() were returning -EINVAL (even though the return type of their function needed to be unsigned int) because they needed to to signal an error back to of_get_regulation_constraints(). In general in the regulator framework the mode is always referred to as an unsigned int. While we could fix this to be a signed int (the highest value we store in there right now is 0x8), it's actually pretty clean to just define the regulator mode 0x0 (the lack of any bits set) as an invalid mode. Let's do that. Suggested-by: Javier Martinez Canillas Fixes: 5e5e3a42c653 ("regulator: of: Add support for parsing initial and suspend modes") Signed-off-by: Douglas Anderson --- Changes in v2: - Use Javier's suggestion of defining 0x0 as invalid drivers/regulator/cpcap-regulator.c | 2 +- drivers/regulator/of_regulator.c | 15 +++++++++------ drivers/regulator/twl-regulator.c | 2 +- include/linux/regulator/consumer.h | 1 + 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/regulator/cpcap-regulator.c b/drivers/regulator/cpcap-regulator.c index f541b80f1b54..bd910fe123d9 100644 --- a/drivers/regulator/cpcap-regulator.c +++ b/drivers/regulator/cpcap-regulator.c @@ -222,7 +222,7 @@ static unsigned int cpcap_map_mode(unsigned int mode) case CPCAP_BIT_AUDIO_LOW_PWR: return REGULATOR_MODE_STANDBY; default: - return -EINVAL; + return REGULATOR_MODE_INVALID; } } diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c index f47264fa1940..22c02b7a338b 100644 --- a/drivers/regulator/of_regulator.c +++ b/drivers/regulator/of_regulator.c @@ -124,11 +124,12 @@ static void of_get_regulation_constraints(struct device_node *np, if (!of_property_read_u32(np, "regulator-initial-mode", &pval)) { if (desc && desc->of_map_mode) { - ret = desc->of_map_mode(pval); - if (ret == -EINVAL) + unsigned int mode = desc->of_map_mode(pval); + + if (mode == REGULATOR_MODE_INVALID) pr_err("%s: invalid mode %u\n", np->name, pval); else - constraints->initial_mode = ret; + constraints->initial_mode = mode; } else { pr_warn("%s: mapping for mode %d not defined\n", np->name, pval); @@ -163,12 +164,14 @@ static void of_get_regulation_constraints(struct device_node *np, if (!of_property_read_u32(suspend_np, "regulator-mode", &pval)) { if (desc && desc->of_map_mode) { - ret = desc->of_map_mode(pval); - if (ret == -EINVAL) + unsigned int mode = desc->of_map_mode(pval); + + mode = desc->of_map_mode(pval); + if (mode == REGULATOR_MODE_INVALID) pr_err("%s: invalid mode %u\n", np->name, pval); else - suspend_state->mode = ret; + suspend_state->mode = mode; } else { pr_warn("%s: mapping for mode %d not defined\n", np->name, pval); diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c index a4456db5849d..884c7505ed91 100644 --- a/drivers/regulator/twl-regulator.c +++ b/drivers/regulator/twl-regulator.c @@ -274,7 +274,7 @@ static inline unsigned int twl4030reg_map_mode(unsigned int mode) case RES_STATE_SLEEP: return REGULATOR_MODE_STANDBY; default: - return -EINVAL; + return REGULATOR_MODE_INVALID; } } diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index df176d7c2b87..25602afd4844 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h @@ -80,6 +80,7 @@ struct regmap; * These modes can be OR'ed together to make up a mask of valid register modes. */ +#define REGULATOR_MODE_INVALID 0x0 #define REGULATOR_MODE_FAST 0x1 #define REGULATOR_MODE_NORMAL 0x2 #define REGULATOR_MODE_IDLE 0x4 -- 2.17.0.484.g0c8726318c-goog