All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Guillaume Stols <gstols@baylibre.com>
Cc: "Uwe Kleine-König" <ukleinek@kernel.org>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	linux-pwm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-fbdev@vger.kernel.org, linux-iio@vger.kernel.org,
	devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
	aardelean@baylibre.com, dlechner@baylibre.com,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH v3 06/10] iio: adc: ad7606: Add PWM support for conversion trigger
Date: Sat, 5 Oct 2024 12:40:36 +0100	[thread overview]
Message-ID: <20241005124036.5a09367a@jic23-huawei> (raw)
In-Reply-To: <20241004-ad7606_add_iio_backend_support-v3-6-38757012ce82@baylibre.com>

On Fri, 04 Oct 2024 21:48:40 +0000
Guillaume Stols <gstols@baylibre.com> wrote:

> Until now, the conversion were triggered by setting high the GPIO
> connected to the convst pin. This commit gives the possibility to
> connect the convst pin to a PWM.
> Connecting a PWM allows to have a better control on the samplerate,
> but it must be handled with care, as it is completely decorrelated of
> the driver's busy pin handling.
> Hence it is not recommended to be used "as is" but must be exploited
> in conjunction with IIO backend, and for now only a mock functionality
> is enabled, i.e PWM never swings, but is used as a GPIO, i.e duty_cycle
> == period equals high state, duty_cycle == 0 equals low state.
> 
> This mock functionality will be disabled after the IIO backend usecase
> is introduced.
> 
> Signed-off-by: Guillaume Stols <gstols@baylibre.com>
If you reroll for other reasons a few trivial comments inline

J
> ---
>  drivers/iio/adc/ad7606.c | 164 ++++++++++++++++++++++++++++++++++++++++-------
>  drivers/iio/adc/ad7606.h |   2 +
>  2 files changed, 144 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7606.c b/drivers/iio/adc/ad7606.c
> index d1aec53e0bcf..224ffaf3dbff 100644
> --- a/drivers/iio/adc/ad7606.c
> +++ b/drivers/iio/adc/ad7606.c
> @@ -13,10 +13,12 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/property.h>
> +#include <linux/pwm.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/sched.h>
>  #include <linux/slab.h>
>  #include <linux/sysfs.h>
> +#include <linux/units.h>
>  #include <linux/util_macros.h>
>  
>  #include <linux/iio/buffer.h>
> @@ -299,6 +301,82 @@ static int ad7606_reg_access(struct iio_dev *indio_dev,
>  	}
>  }
>  


>  int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
>  		 const char *name, unsigned int id,
>  		 const struct ad7606_bus_ops *bops)
> @@ -951,20 +1050,48 @@ int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
>  	if (ret)
>  		return ret;
>  
> -	st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
> -					  indio_dev->name,
> -					  iio_device_id(indio_dev));
> -	if (!st->trig)
> -		return -ENOMEM;
> -
> -	st->trig->ops = &ad7606_trigger_ops;
> -	iio_trigger_set_drvdata(st->trig, indio_dev);
> -	ret = devm_iio_trigger_register(dev, st->trig);
> -	if (ret)
> -		return ret;
> +	/* If convst pin is not defined, setup PWM. */
> +	if (!st->gpio_convst) {
> +		st->cnvst_pwm = devm_pwm_get(dev, NULL);
> +		if (IS_ERR(st->cnvst_pwm))
> +			return PTR_ERR(st->cnvst_pwm);

As below. Blank line preferred here.

> +		/* The PWM is initialized at 1MHz to have a fast enough GPIO emulation. */
> +		ret = ad7606_set_sampling_freq(st, 1 * MEGA);
> +		if (ret)
> +			return ret;
>  
> -	indio_dev->trig = iio_trigger_get(st->trig);
> +		ret = ad7606_pwm_set_low(st);
> +		if (ret)
> +			return ret;
>  
> +		/*
> +		 * PWM is not disabled when sampling stops, but instead its duty cycle is set
> +		 * to 0% to be sure we have a "low" state. After we unload the driver, let's
> +		 * disable the PWM.
> +		 */
> +		ret = devm_add_action_or_reset(dev, ad7606_pwm_disable,
> +					       st->cnvst_pwm);
> +		if (ret)
> +			return ret;
> +	} else {
> +		st->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
> +						  indio_dev->name,
> +						  iio_device_id(indio_dev));
> +		if (!st->trig)
> +			return -ENOMEM;

Blank line preferred here.  Generally it helps readability a little to
have one after any 'do something and check for errors block'.


> +		st->trig->ops = &ad7606_trigger_ops;
> +		iio_trigger_set_drvdata(st->trig, indio_dev);
> +		ret = devm_iio_trigger_register(dev, st->trig);
> +		if (ret)
> +			return ret;

It we are rerolling for any other reason add a blank line here too.
If not I might tweak whilst applying or might not bother..

> +		indio_dev->trig = iio_trigger_get(st->trig);
> +		ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
> +						      &iio_pollfunc_store_time,
> +						      &ad7606_trigger_handler,
> +						      &ad7606_buffer_ops);
> +		if (ret)
> +			return ret;
> +	}
>  	ret = devm_request_threaded_irq(dev, irq,
>  					NULL,
>  					&ad7606_interrupt,
> @@ -973,13 +1100,6 @@ int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,
>  	if (ret)
>  		return ret;
>  
> -	ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
> -					      &iio_pollfunc_store_time,
> -					      &ad7606_trigger_handler,
> -					      &ad7606_buffer_ops);
> -	if (ret)
> -		return ret;
> -
>  	return devm_iio_device_register(dev, indio_dev);
>  }


  reply	other threads:[~2024-10-05 11:40 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-04 21:48 [PATCH v3 00/10] Add iio backend compatibility for ad7606 Guillaume Stols
2024-10-04 21:48 ` [PATCH v3 01/10] iio: adc: ad7606: Fix typo in the driver name Guillaume Stols
2024-10-05 11:22   ` Jonathan Cameron
2024-10-04 21:48 ` [PATCH v3 02/10] dt-bindings: iio: adc: ad7606: Remove spi-cpha from required Guillaume Stols
2024-10-05 18:47   ` Rob Herring (Arm)
2024-10-04 21:48 ` [PATCH v3 03/10] dt-bindings: iio: adc: ad7606: Add iio backend bindings Guillaume Stols
2024-10-05 18:50   ` Rob Herring
2024-10-04 21:48 ` [PATCH v3 04/10] Documentation: iio: Document ad7606 driver Guillaume Stols
2024-10-04 21:48 ` [PATCH v3 05/10] iio: adc: ad7606: Sort includes in alphabetical order Guillaume Stols
2024-10-05 11:26   ` Jonathan Cameron
2024-10-04 21:48 ` [PATCH v3 06/10] iio: adc: ad7606: Add PWM support for conversion trigger Guillaume Stols
2024-10-05 11:40   ` Jonathan Cameron [this message]
2024-10-04 21:48 ` [PATCH v3 07/10] iio: adc: ad7606: Add compatibility to fw_nodes Guillaume Stols
2024-10-06  6:23   ` kernel test robot
2024-10-04 21:48 ` [PATCH v3 08/10] iio: adc: ad7606: Introduce num_adc_channels Guillaume Stols
2024-10-04 21:48 ` [PATCH v3 09/10] iio: adc: ad7606: Add iio-backend support Guillaume Stols
2024-10-05 11:53   ` Jonathan Cameron
2024-10-08 14:15     ` Guillaume Stols
2024-10-10 18:04       ` Jonathan Cameron
2024-10-06  5:31   ` kernel test robot
2024-10-04 21:48 ` [PATCH v3 10/10] iio: adc: ad7606: Disable PWM usage for non backend version Guillaume Stols

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=20241005124036.5a09367a@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=aardelean@baylibre.com \
    --cc=conor+dt@kernel.org \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=gstols@baylibre.com \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=robh@kernel.org \
    --cc=ukleinek@kernel.org \
    /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.