All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Jonathan Cameron <jic23@kernel.org>,
	linux-iio@vger.kernel.org, Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Stephan Gerhold <stephan@gerhold.net>
Subject: Re: [PATCH] iio: ak8975: Convert to use GPIO descriptor
Date: Mon, 2 Dec 2019 14:51:48 +0200	[thread overview]
Message-ID: <20191202125148.GE32742@smile.fi.intel.com> (raw)
In-Reply-To: <20191202081730.61707-1-linus.walleij@linaro.org>

On Mon, Dec 02, 2019 at 09:17:30AM +0100, Linus Walleij wrote:
> The end-of-conversion (EOC) GPIO line is better to grab using
> a GPIO descriptor. We drop the pdata for this: clients using board
> files can use machine descriptor tables to pass this GPIO from
> static data.
> 

LGTM,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

One nit below, though.

> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Cc: Stephan Gerhold <stephan@gerhold.net>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/iio/magnetometer/ak8975.c       | 54 +++++++++----------------
>  include/linux/iio/magnetometer/ak8975.h |  2 -
>  2 files changed, 20 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/iio/magnetometer/ak8975.c b/drivers/iio/magnetometer/ak8975.c
> index 893bec5a0312..da5d75afb536 100644
> --- a/drivers/iio/magnetometer/ak8975.c
> +++ b/drivers/iio/magnetometer/ak8975.c
> @@ -16,8 +16,7 @@
>  #include <linux/mutex.h>
>  #include <linux/delay.h>
>  #include <linux/bitops.h>
> -#include <linux/gpio.h>
> -#include <linux/of_gpio.h>
> +#include <linux/gpio/consumer.h>
>  #include <linux/acpi.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/pm_runtime.h>
> @@ -360,7 +359,7 @@ struct ak8975_data {
>  	struct mutex		lock;
>  	u8			asa[3];
>  	long			raw_to_gauss[3];
> -	int			eoc_gpio;
> +	struct gpio_desc	*eoc_gpiod;
>  	int			eoc_irq;
>  	wait_queue_head_t	data_ready_queue;
>  	unsigned long		flags;
> @@ -498,15 +497,15 @@ static int ak8975_setup_irq(struct ak8975_data *data)
>  	if (client->irq)
>  		irq = client->irq;
>  	else
> -		irq = gpio_to_irq(data->eoc_gpio);
> +		irq = gpiod_to_irq(data->eoc_gpiod);
>  
>  	rc = devm_request_irq(&client->dev, irq, ak8975_irq_handler,
>  			      IRQF_TRIGGER_RISING | IRQF_ONESHOT,
>  			      dev_name(&client->dev), data);
>  	if (rc < 0) {
>  		dev_err(&client->dev,
> -			"irq %d request failed, (gpio %d): %d\n",
> -			irq, data->eoc_gpio, rc);
> +			"irq %d request failed: %d\n",
> +			irq, rc);

Now it fits one line.

>  		return rc;
>  	}
>  
> @@ -549,7 +548,7 @@ static int ak8975_setup(struct i2c_client *client)
>  		return ret;
>  	}
>  
> -	if (data->eoc_gpio > 0 || client->irq > 0) {
> +	if (data->eoc_gpiod || client->irq > 0) {
>  		ret = ak8975_setup_irq(data);
>  		if (ret < 0) {
>  			dev_err(&client->dev,
> @@ -574,7 +573,7 @@ static int wait_conversion_complete_gpio(struct ak8975_data *data)
>  	/* Wait for the conversion to complete. */
>  	while (timeout_ms) {
>  		msleep(AK8975_CONVERSION_DONE_POLL_TIME);
> -		if (gpio_get_value(data->eoc_gpio))
> +		if (gpiod_get_value(data->eoc_gpiod))
>  			break;
>  		timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME;
>  	}
> @@ -646,7 +645,7 @@ static int ak8975_start_read_axis(struct ak8975_data *data,
>  	/* Wait for the conversion to complete. */
>  	if (data->eoc_irq)
>  		ret = wait_conversion_complete_interrupt(data);
> -	else if (gpio_is_valid(data->eoc_gpio))
> +	else if (data->eoc_gpiod)
>  		ret = wait_conversion_complete_gpio(data);
>  	else
>  		ret = wait_conversion_complete_polled(data);
> @@ -856,36 +855,23 @@ static int ak8975_probe(struct i2c_client *client,
>  {
>  	struct ak8975_data *data;
>  	struct iio_dev *indio_dev;
> -	int eoc_gpio;
> +	struct gpio_desc *eoc_gpiod;
>  	int err;
>  	const char *name = NULL;
>  	enum asahi_compass_chipset chipset = AK_MAX_TYPE;
>  	const struct ak8975_platform_data *pdata =
>  		dev_get_platdata(&client->dev);
>  
> -	/* Grab and set up the supplied GPIO. */
> -	if (pdata)
> -		eoc_gpio = pdata->eoc_gpio;
> -	else if (client->dev.of_node)
> -		eoc_gpio = of_get_gpio(client->dev.of_node, 0);
> -	else
> -		eoc_gpio = -1;
> -
> -	if (eoc_gpio == -EPROBE_DEFER)
> -		return -EPROBE_DEFER;
> -
> -	/* We may not have a GPIO based IRQ to scan, that is fine, we will
> -	   poll if so */
> -	if (gpio_is_valid(eoc_gpio)) {
> -		err = devm_gpio_request_one(&client->dev, eoc_gpio,
> -							GPIOF_IN, "ak_8975");
> -		if (err < 0) {
> -			dev_err(&client->dev,
> -				"failed to request GPIO %d, error %d\n",
> -							eoc_gpio, err);
> -			return err;
> -		}
> -	}
> +	/*
> +	 * Grab and set up the supplied GPIO.
> +	 * We may not have a GPIO based IRQ to scan, that is fine, we will
> +	 * poll if so.
> +	 */
> +	eoc_gpiod = devm_gpiod_get_optional(&client->dev, NULL, GPIOD_IN);
> +	if (IS_ERR(eoc_gpiod))
> +		return PTR_ERR(eoc_gpiod);
> +	if (eoc_gpiod)
> +		gpiod_set_consumer_name(eoc_gpiod, "ak_8975");
>  
>  	/* Register with IIO */
>  	indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
> @@ -896,7 +882,7 @@ static int ak8975_probe(struct i2c_client *client,
>  	i2c_set_clientdata(client, indio_dev);
>  
>  	data->client = client;
> -	data->eoc_gpio = eoc_gpio;
> +	data->eoc_gpiod = eoc_gpiod;
>  	data->eoc_irq = 0;
>  
>  	if (!pdata) {
> diff --git a/include/linux/iio/magnetometer/ak8975.h b/include/linux/iio/magnetometer/ak8975.h
> index ac9366f807cb..df3697183800 100644
> --- a/include/linux/iio/magnetometer/ak8975.h
> +++ b/include/linux/iio/magnetometer/ak8975.h
> @@ -6,11 +6,9 @@
>  
>  /**
>   * struct ak8975_platform_data - AK8975 magnetometer driver platform data
> - * @eoc_gpio:    data ready event gpio
>   * @orientation: mounting matrix relative to main hardware
>   */
>  struct ak8975_platform_data {
> -	int                     eoc_gpio;
>  	struct iio_mount_matrix orientation;
>  };
>  
> -- 
> 2.23.0
> 

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2019-12-02 12:51 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-02  8:17 [PATCH] iio: ak8975: Convert to use GPIO descriptor Linus Walleij
2019-12-02 12:51 ` Andy Shevchenko [this message]
2019-12-02 12:57   ` Andy Shevchenko
2019-12-06 17:43     ` Jonathan Cameron

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=20191202125148.GE32742@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    --cc=stephan@gerhold.net \
    /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.