All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Kent Gibson <warthog618@gmail.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: Re: [PATCH v4 02/13] gpiolib: have a single place of calling set_config()
Date: Sat, 1 Feb 2020 11:52:32 -0800	[thread overview]
Message-ID: <20200201195232.GA17364@roeck-us.net> (raw)
In-Reply-To: <20191224120709.18247-3-brgl@bgdev.pl>

On Tue, Dec 24, 2019 at 01:06:58PM +0100, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> 
> Instead of calling the gpiochip's set_config() callback directly and
> checking its existence every time - just add a new routine that performs
> this check internally. Call it in gpio_set_config() and
> gpiod_set_transitory(). Also call it in gpiod_set_debounce() and drop
> the check for chip->set() as it's irrelevant to this config option.
> 
> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

This patch made it into mainline, even though a regression was reported
against it by Geert. Please note that it is not just a theoretic problem
but _does_ indeed cause regressions.

Guenter

> ---
>  drivers/gpio/gpiolib.c | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index e5d101ee9ada..616e431039fc 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -3042,6 +3042,15 @@ EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
>   * rely on gpio_request() having been called beforehand.
>   */
>  
> +static int gpio_do_set_config(struct gpio_chip *gc, unsigned int offset,
> +			      enum pin_config_param mode)
> +{
> +	if (!gc->set_config)
> +		return -ENOTSUPP;
> +
> +	return gc->set_config(gc, offset, mode);
> +}
> +
>  static int gpio_set_config(struct gpio_chip *gc, unsigned int offset,
>  			   enum pin_config_param mode)
>  {
> @@ -3060,7 +3069,7 @@ static int gpio_set_config(struct gpio_chip *gc, unsigned int offset,
>  	}
>  
>  	config = PIN_CONF_PACKED(mode, arg);
> -	return gc->set_config ? gc->set_config(gc, offset, config) : -ENOTSUPP;
> +	return gpio_do_set_config(gc, offset, mode);
>  }
>  
>  static int gpio_set_bias(struct gpio_chip *chip, struct gpio_desc *desc)
> @@ -3294,15 +3303,9 @@ int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
>  
>  	VALIDATE_DESC(desc);
>  	chip = desc->gdev->chip;
> -	if (!chip->set || !chip->set_config) {
> -		gpiod_dbg(desc,
> -			  "%s: missing set() or set_config() operations\n",
> -			  __func__);
> -		return -ENOTSUPP;
> -	}
>  
>  	config = pinconf_to_config_packed(PIN_CONFIG_INPUT_DEBOUNCE, debounce);
> -	return chip->set_config(chip, gpio_chip_hwgpio(desc), config);
> +	return gpio_do_set_config(chip, gpio_chip_hwgpio(desc), config);
>  }
>  EXPORT_SYMBOL_GPL(gpiod_set_debounce);
>  
> @@ -3339,7 +3342,7 @@ int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
>  	packed = pinconf_to_config_packed(PIN_CONFIG_PERSIST_STATE,
>  					  !transitory);
>  	gpio = gpio_chip_hwgpio(desc);
> -	rc = chip->set_config(chip, gpio, packed);
> +	rc = gpio_do_set_config(chip, gpio, packed);
>  	if (rc == -ENOTSUPP) {
>  		dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n",
>  				gpio);

  parent reply	other threads:[~2020-02-01 19:52 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-24 12:06 [PATCH v4 00/13] gpiolib: add an ioctl() for monitoring line status changes Bartosz Golaszewski
2019-12-24 12:06 ` [PATCH v4 01/13] gpiolib: use 'unsigned int' instead of 'unsigned' in gpio_set_config() Bartosz Golaszewski
2020-01-07 10:02   ` Linus Walleij
2019-12-24 12:06 ` [PATCH v4 02/13] gpiolib: have a single place of calling set_config() Bartosz Golaszewski
2020-01-07 10:02   ` Linus Walleij
2020-01-20  8:44   ` Geert Uytterhoeven
2020-01-20  9:54     ` Andy Shevchenko
2020-01-23 10:16     ` Bartosz Golaszewski
2020-02-01 19:52   ` Guenter Roeck [this message]
2020-02-03 11:04     ` Bartosz Golaszewski
2019-12-24 12:06 ` [PATCH v4 03/13] gpiolib: convert the type of hwnum to unsigned int in gpiochip_get_desc() Bartosz Golaszewski
2020-01-07 10:03   ` Linus Walleij
2019-12-24 12:07 ` [PATCH v4 04/13] gpiolib: use gpiochip_get_desc() in linehandle_create() Bartosz Golaszewski
2020-01-07 10:04   ` Linus Walleij
2019-12-24 12:07 ` [PATCH v4 05/13] gpiolib: use gpiochip_get_desc() in lineevent_create() Bartosz Golaszewski
2020-01-07 10:04   ` Linus Walleij
2019-12-24 12:07 ` [PATCH v4 06/13] gpiolib: use gpiochip_get_desc() in gpio_ioctl() Bartosz Golaszewski
2020-01-07 10:04   ` Linus Walleij
2019-12-24 12:07 ` [PATCH v4 07/13] kfifo: provide noirqsave variants of spinlocked in and out helpers Bartosz Golaszewski
2019-12-24 12:07 ` [PATCH v4 08/13] kfifo: provide kfifo_is_empty_spinlocked() Bartosz Golaszewski
2019-12-24 12:07 ` [PATCH v4 09/13] gpiolib: rework the locking mechanism for lineevent kfifo Bartosz Golaszewski
2020-01-08 11:06   ` Andy Shevchenko
2019-12-24 12:07 ` [PATCH v4 10/13] gpiolib: emit a debug message when adding events to a full kfifo Bartosz Golaszewski
2019-12-24 12:07 ` [PATCH v4 11/13] gpiolib: provide a dedicated function for setting lineinfo Bartosz Golaszewski
2020-01-08 12:41   ` Andy Shevchenko
2019-12-24 12:07 ` [PATCH v4 12/13] gpiolib: add new ioctl() for monitoring changes in line info Bartosz Golaszewski
2020-01-08 12:46   ` Andy Shevchenko
2020-01-08 16:55     ` Bartosz Golaszewski
2020-06-09  0:23   ` Kent Gibson
2020-06-09  7:58     ` Bartosz Golaszewski
2019-12-24 12:07 ` [PATCH v4 13/13] tools: gpio: implement gpio-watch Bartosz Golaszewski
2020-01-08 12:47   ` Andy Shevchenko
2020-01-07 10:07 ` [PATCH v4 00/13] gpiolib: add an ioctl() for monitoring line status changes Linus Walleij
2020-01-07 10:38   ` Bartosz Golaszewski
2020-01-07 12:50     ` Linus Walleij
2020-01-07 13:15       ` Stefani Seibold
2020-01-07 14:44       ` Andy Shevchenko
2020-01-07 14:45         ` Andy Shevchenko
2020-01-07 15:19           ` Bartosz Golaszewski
2020-01-07 15:58             ` Andy Shevchenko
2020-01-07 16:51               ` Bartosz Golaszewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200201195232.GA17364@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=bgolaszewski@baylibre.com \
    --cc=brgl@bgdev.pl \
    --cc=gregkh@linuxfoundation.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=warthog618@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.