From patchwork Fri May 12 19:14:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 761827 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wPfmn6H0Mz9s3w for ; Sat, 13 May 2017 05:14:49 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CNRVKIgc"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756399AbdELTOs (ORCPT ); Fri, 12 May 2017 15:14:48 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:34570 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757155AbdELTOr (ORCPT ); Fri, 12 May 2017 15:14:47 -0400 Received: by mail-wm0-f65.google.com with SMTP id d127so15661662wmf.1; Fri, 12 May 2017 12:14:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=SGBMhitaveALV74H1KZ2wAsBsGlTUaRr9EcGC7tby9c=; b=CNRVKIgcaVJX96rRpb7IUq2npKXyAKkBqZOa7SovUFsCaAzd+m4pa9uMzXUxPQGj3z PAQwErdGalP9yyMNBMFPkUSn13ARTncKaOsRy92jjSItLetpd1mxfGJAhpoDa0x390v2 kpKsUOi8VvBhquvMhr8yMT9ZqomkVBWQH4E1X8FKngeP5UZ5NQ8nLhd+wjUL7m0TFbto lD/1KIczXHoE0UgFCRZvgNxK8CKYQgCB8PGXZcVeUSRupqFOftlM50Obo6Uhiw8hFiMb 84VNVtAgaBVx465RZvACarilt5QCapMsvnIGeIkYZn9jaz+wGBf6fLMas+oV1QFtj6DF +leg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=SGBMhitaveALV74H1KZ2wAsBsGlTUaRr9EcGC7tby9c=; b=dlMfUIXX/jXJNHWRqCFmdKZvDsZVv1H6MIjXyPkxcZZpZoj47/ExerYwDCcGvJNXXf vGGDNNrkIgjfhU4hwMLFrPDO1byoAtP1bX8nDGxf8MdbD+efBrEwmVksgkpGwilCw6Xy hNWnLg9Go6qud+9mEY7R1V4APWOPaxw+pa/bJCIodGpzo0xXBPP5fapGRYZdOe5YRS16 rJHPO3KOHxLqPxO8vtXeNzmcdE15uZFNeGs3YiCz6cYjER/9NstqjsbZAr6Blwy67pvR y/uQU1gj2xWFY0Ee1JrZzJWjMTMA5h4/VF2pbkvuXfRMph/2iAOwcKixA5R6Xo421P+D X3mg== X-Gm-Message-State: AODbwcCwKoebMYLCBeqtN0RSN6AOUI6O6tfoVoonHtwVVeDIXAf1ID8H +HOkRAuWipt7Zw== X-Received: by 10.28.126.202 with SMTP id z193mr3641150wmc.141.1494616485437; Fri, 12 May 2017 12:14:45 -0700 (PDT) Received: from ?IPv6:2003:c6:ebf6:4900:24d8:d7e8:4461:d553? (p200300C6EBF6490024D8D7E84461D553.dip0.t-ipconnect.de. [2003:c6:ebf6:4900:24d8:d7e8:4461:d553]) by smtp.googlemail.com with ESMTPSA id 188sm2908621wmf.29.2017.05.12.12.14.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 May 2017 12:14:45 -0700 (PDT) From: Heiner Kallweit Subject: [PATCH v2 5/6] pintrl: meson: improve meson_get_bank and export it To: Jerome Brunet , Mark Rutland , Marc Zyngier , Linus Walleij , Kevin Hilman , Thomas Gleixner Cc: devicetree@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-gpio@vger.kernel.org, "thierry.reding@gmail.com" , Thierry Reding References: <36164ed8-aa59-2a77-b7fc-9adce03a2fc1@gmail.com> Message-ID: <6bc65c7e-6a4e-3375-2d4f-dad75ed2ec9a@gmail.com> Date: Fri, 12 May 2017 21:14:12 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 MIME-Version: 1.0 In-Reply-To: <36164ed8-aa59-2a77-b7fc-9adce03a2fc1@gmail.com> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org Export meson_get_bank because it's needed for the GPIO IRQ controller. To avoid potential name conflicts rename it to meson_pinctrl_get_bank. In addition simplify it by returning the pointer directly and using a ERR_PTR in case of an error. Signed-off-by: Heiner Kallweit --- v2: - add this patch to the series --- drivers/pinctrl/meson/pinctrl-meson.c | 59 +++++++++++++++-------------------- drivers/pinctrl/meson/pinctrl-meson.h | 3 ++ 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c index 66ed70c1..39ad9861 100644 --- a/drivers/pinctrl/meson/pinctrl-meson.c +++ b/drivers/pinctrl/meson/pinctrl-meson.c @@ -63,28 +63,24 @@ #include "pinctrl-meson.h" /** - * meson_get_bank() - find the bank containing a given pin + * meson_pinctrl_get_bank() - find the bank containing a given pin * * @pc: the pinctrl instance * @pin: the pin number - * @bank: the found bank * - * Return: 0 on success, a negative value on error + * Return: the found bank or an ERR_PTR */ -static int meson_get_bank(struct meson_pinctrl *pc, unsigned int pin, - struct meson_bank **bank) +struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc, + unsigned int pin) { + struct meson_bank *bank = pc->data->banks; int i; - for (i = 0; i < pc->data->num_banks; i++) { - if (pin >= pc->data->banks[i].first && - pin <= pc->data->banks[i].last) { - *bank = &pc->data->banks[i]; - return 0; - } - } + for (i = 0; i < pc->data->num_banks; i++, bank++) + if (pin >= bank->first && pin <= bank->last) + return bank; - return -EINVAL; + return ERR_PTR(-EINVAL); } /** @@ -261,9 +257,9 @@ static int meson_pinconf_set(struct pinctrl_dev *pcdev, unsigned int pin, unsigned int reg, bit; int i, ret; - ret = meson_get_bank(pc, pin, &bank); - if (ret) - return ret; + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) + return PTR_ERR(bank); for (i = 0; i < num_configs; i++) { param = pinconf_to_config_param(configs[i]); @@ -324,9 +320,9 @@ static int meson_pinconf_get_pull(struct meson_pinctrl *pc, unsigned int pin) unsigned int reg, bit, val; int ret, conf; - ret = meson_get_bank(pc, pin, &bank); - if (ret) - return ret; + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) + return PTR_ERR(bank); meson_calc_reg_and_bit(bank, pin, REG_PULLEN, ®, &bit); @@ -427,12 +423,11 @@ static int meson_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) struct meson_pinctrl *pc = gpiochip_get_data(chip); unsigned int reg, bit, pin; struct meson_bank *bank; - int ret; pin = pc->data->pin_base + gpio; - ret = meson_get_bank(pc, pin, &bank); - if (ret) - return ret; + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) + return PTR_ERR(bank); meson_calc_reg_and_bit(bank, pin, REG_DIR, ®, &bit); @@ -448,9 +443,9 @@ static int meson_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int ret; pin = pc->data->pin_base + gpio; - ret = meson_get_bank(pc, pin, &bank); - if (ret) - return ret; + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) + return PTR_ERR(bank); meson_calc_reg_and_bit(bank, pin, REG_DIR, ®, &bit); ret = regmap_update_bits(pc->reg_gpio, reg, BIT(bit), 0); @@ -467,11 +462,10 @@ static void meson_gpio_set(struct gpio_chip *chip, unsigned gpio, int value) struct meson_pinctrl *pc = gpiochip_get_data(chip); unsigned int reg, bit, pin; struct meson_bank *bank; - int ret; pin = pc->data->pin_base + gpio; - ret = meson_get_bank(pc, pin, &bank); - if (ret) + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) return; meson_calc_reg_and_bit(bank, pin, REG_OUT, ®, &bit); @@ -484,12 +478,11 @@ static int meson_gpio_get(struct gpio_chip *chip, unsigned gpio) struct meson_pinctrl *pc = gpiochip_get_data(chip); unsigned int reg, bit, val, pin; struct meson_bank *bank; - int ret; pin = pc->data->pin_base + gpio; - ret = meson_get_bank(pc, pin, &bank); - if (ret) - return ret; + bank = meson_pinctrl_get_bank(pc, pin); + if (IS_ERR(bank)) + return PTR_ERR(bank); meson_calc_reg_and_bit(bank, pin, REG_IN, ®, &bit); regmap_read(pc->reg_gpio, reg, &val); diff --git a/drivers/pinctrl/meson/pinctrl-meson.h b/drivers/pinctrl/meson/pinctrl-meson.h index 890f296f..40b56aff 100644 --- a/drivers/pinctrl/meson/pinctrl-meson.h +++ b/drivers/pinctrl/meson/pinctrl-meson.h @@ -176,3 +176,6 @@ extern struct meson_pinctrl_data meson_gxbb_periphs_pinctrl_data; extern struct meson_pinctrl_data meson_gxbb_aobus_pinctrl_data; extern struct meson_pinctrl_data meson_gxl_periphs_pinctrl_data; extern struct meson_pinctrl_data meson_gxl_aobus_pinctrl_data; + +struct meson_bank *meson_pinctrl_get_bank(const struct meson_pinctrl *pc, + unsigned int pin);