devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Jonathan Santos <Jonathan.Santos@analog.com>
Cc: <linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <lars@metafoo.de>,
	<Michael.Hennerich@analog.com>, <marcelo.schmitt@analog.com>,
	<robh@kernel.org>, <krzk+dt@kernel.org>, <conor+dt@kernel.org>,
	<jonath4nns@gmail.com>, <marcelo.schmitt1@gmail.com>,
	<dlechner@baylibre.com>
Subject: Re: [PATCH RESEND v3 15/17] iio: adc: ad7768-1: replace manual attribute declaration
Date: Sun, 16 Feb 2025 16:21:30 +0000	[thread overview]
Message-ID: <20250216162130.0de4f148@jic23-huawei> (raw)
In-Reply-To: <ea5d5ef777d4d7d15471369813c1613990fee862.1739368121.git.Jonathan.Santos@analog.com>

On Wed, 12 Feb 2025 15:18:48 -0300
Jonathan Santos <Jonathan.Santos@analog.com> wrote:

> Use read_avail callback from struct iio_info to replace the manual
> declaration of sampling_frequency_available attribute.
> 
> Signed-off-by: Jonathan Santos <Jonathan.Santos@analog.com>
> ---
> v3 Changes:
> * New patch in v3.
> ---
>  drivers/iio/adc/ad7768-1.c | 58 +++++++++++++++++---------------------
>  1 file changed, 26 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
> index 716cf3582577..8aea38c154fe 100644
> --- a/drivers/iio/adc/ad7768-1.c
> +++ b/drivers/iio/adc/ad7768-1.c
> @@ -187,6 +187,7 @@ static const struct iio_chan_spec ad7768_channels[] = {
>  		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
>  		.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
>  		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
> +		.info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ),
>  		.indexed = 1,
>  		.channel = 0,
>  		.scan_index = 0,
> @@ -207,6 +208,7 @@ struct ad7768_state {
>  	unsigned int mclk_freq;
>  	unsigned int dec_rate;
>  	unsigned int samp_freq;
> +	unsigned int samp_freq_avail[ARRAY_SIZE(ad7768_clk_config)];
>  	struct completion completion;
>  	struct iio_trigger *trig;
>  	struct gpio_desc *gpio_sync_in;
> @@ -564,28 +566,6 @@ static int ad7768_set_freq(struct ad7768_state *st,
>  	return 0;
>  }
>  
> -static ssize_t ad7768_sampling_freq_avail(struct device *dev,
> -					  struct device_attribute *attr,
> -					  char *buf)
> -{
> -	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
> -	struct ad7768_state *st = iio_priv(indio_dev);
> -	unsigned int freq;
> -	int i, len = 0;
> -
> -	for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++) {
> -		freq = DIV_ROUND_CLOSEST(st->mclk_freq,
> -					 ad7768_clk_config[i].clk_div);
> -		len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq);
> -	}
> -
> -	buf[len - 1] = '\n';
> -
> -	return len;
> -}
> -
> -static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(ad7768_sampling_freq_avail);
> -
>  static int ad7768_read_raw(struct iio_dev *indio_dev,
>  			   struct iio_chan_spec const *chan,
>  			   int *val, int *val2, long info)
> @@ -633,6 +613,29 @@ static int ad7768_read_raw(struct iio_dev *indio_dev,
>  	return -EINVAL;
>  }
>  
> +static int ad7768_read_avail(struct iio_dev *indio_dev,
> +			     struct iio_chan_spec const *chan,
> +			     const int **vals, int *type, int *length,
> +			     long info)
> +{
> +	struct ad7768_state *st = iio_priv(indio_dev);
> +	int i;
> +
> +	switch (info) {
> +	case IIO_CHAN_INFO_SAMP_FREQ:
> +		for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++)
> +			st->samp_freq_avail[i] = DIV_ROUND_CLOSEST(st->mclk_freq,
> +								   ad7768_clk_config[i].clk_div);
There are some complex race conditions around these available arrays, so in
general it is better to make it obvious when they are static after
init vs actually dynamic.  In this case I think we can fill this
in the moment we know mclk_freq?  If so please move the calculation into
probe() and just reference it here.

How to close the race condition is an ongoing topic but I don't think
that problem applies here anyway!

Jonathan

> +
> +		*vals = (int *)st->samp_freq_avail;
> +		*length = ARRAY_SIZE(ad7768_clk_config);
> +		*type = IIO_VAL_INT;
> +		return IIO_AVAIL_LIST;
> +	default:
> +		return -EINVAL;
> +	}
> +}
> +
>  static int ad7768_write_raw(struct iio_dev *indio_dev,
>  			    struct iio_chan_spec const *chan,
>  			    int val, int val2, long info)
> @@ -655,15 +658,6 @@ static int ad7768_read_label(struct iio_dev *indio_dev,
>  	return sprintf(label, "%s\n", st->labels[chan->channel]);
>  }
>  
> -static struct attribute *ad7768_attributes[] = {
> -	&iio_dev_attr_sampling_frequency_available.dev_attr.attr,
> -	NULL
> -};
> -
> -static const struct attribute_group ad7768_group = {
> -	.attrs = ad7768_attributes,
> -};
> -
>  static int ad7768_get_current_scan_type(const struct iio_dev *indio_dev,
>  					const struct iio_chan_spec *chan)
>  {
> @@ -674,8 +668,8 @@ static int ad7768_get_current_scan_type(const struct iio_dev *indio_dev,
>  }
>  
>  static const struct iio_info ad7768_info = {
> -	.attrs = &ad7768_group,
>  	.read_raw = &ad7768_read_raw,
> +	.read_avail = &ad7768_read_avail,
>  	.write_raw = &ad7768_write_raw,
>  	.read_label = ad7768_read_label,
>  	.get_current_scan_type = &ad7768_get_current_scan_type,


  reply	other threads:[~2025-02-16 16:21 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-12 18:15 [PATCH RESEND v3 00/17] iio: adc: ad7768-1: Add features, improvements, and fixes Jonathan Santos
2025-02-12 18:15 ` [PATCH RESEND v3 01/17] iio: adc: ad7768-1: Fix conversion result sign Jonathan Santos
2025-02-12 18:16 ` [PATCH RESEND v3 02/17] iio: adc: ad7768-1: set MOSI idle state to prevent accidental reset Jonathan Santos
2025-02-16 15:59   ` Jonathan Cameron
2025-02-12 18:16 ` [PATCH RESEND v3 03/17] dt-bindings: iio: adc: ad7768-1: add trigger-sources property Jonathan Santos
2025-02-13 20:24   ` Conor Dooley
2025-02-27 21:30     ` Jonathan Santos
2025-03-21 14:39       ` Rob Herring
2025-02-12 18:16 ` [PATCH RESEND v3 04/17] dt-bindings: iio: adc: ad7768-1: Document GPIO controller Jonathan Santos
2025-02-12 18:16 ` [PATCH RESEND v3 05/17] dt-bindings: iio: adc: ad7768-1: document regulator provider property Jonathan Santos
2025-02-13 20:25   ` Conor Dooley
2025-02-20 21:22   ` David Lechner
2025-02-12 18:16 ` [PATCH RESEND v3 06/17] Documentation: ABI: add wideband filter type to sysfs-bus-iio Jonathan Santos
2025-02-20 21:28   ` David Lechner
2025-02-22 11:51     ` Jonathan Cameron
2025-02-12 18:17 ` [PATCH RESEND v3 07/17] iio: adc: ad7768-1: remove unnecessary locking Jonathan Santos
2025-02-20 21:30   ` David Lechner
2025-02-12 18:17 ` [PATCH RESEND v3 08/17] iio: adc: ad7768-1: convert driver to use regmap Jonathan Santos
2025-02-16 16:06   ` Jonathan Cameron
2025-02-20 21:41   ` David Lechner
2025-02-12 18:17 ` [PATCH RESEND v3 09/17] iio: adc: ad7768-1: Add reset gpio Jonathan Santos
2025-02-12 18:17 ` [PATCH RESEND v3 10/17] iio: adc: ad7768-1: Move buffer allocation to a separate function Jonathan Santos
2025-02-20 21:43   ` David Lechner
2025-02-12 18:17 ` [PATCH RESEND v3 11/17] iio: adc: ad7768-1: add regulator to control VCM output Jonathan Santos
2025-02-13 22:57   ` kernel test robot
2025-02-16 16:11   ` Jonathan Cameron
2025-02-20 22:20   ` David Lechner
2025-02-12 18:18 ` [PATCH RESEND v3 12/17] iio: adc: ad7768-1: Add GPIO controller support Jonathan Santos
2025-02-16 16:14   ` Jonathan Cameron
2025-02-19 20:34   ` Linus Walleij
2025-02-20 22:27     ` David Lechner
2025-02-27 21:36       ` Jonathan Santos
2025-02-27 21:54         ` David Lechner
2025-02-28  8:52       ` Linus Walleij
2025-02-28 15:55         ` David Lechner
2025-03-04  8:03   ` Linus Walleij
2025-02-12 18:18 ` [PATCH RESEND v3 13/17] iio: adc: ad7768-1: add multiple scan types to support 16-bits mode Jonathan Santos
2025-02-20 22:38   ` David Lechner
2025-02-12 18:18 ` [PATCH RESEND v3 14/17] iio: adc: ad7768-1: add support for Synchronization over SPI Jonathan Santos
2025-02-12 18:18 ` [PATCH RESEND v3 15/17] iio: adc: ad7768-1: replace manual attribute declaration Jonathan Santos
2025-02-16 16:21   ` Jonathan Cameron [this message]
2025-02-12 18:18 ` [PATCH RESEND v3 16/17] iio: adc: ad7768-1: add filter type and oversampling ratio attributes Jonathan Santos
2025-02-16 16:31   ` Jonathan Cameron
2025-02-20 13:28     ` Jonathan Santos
2025-02-12 18:19 ` [PATCH RESEND v3 17/17] iio: adc: ad7768-1: add low pass -3dB cutoff attribute Jonathan Santos
2025-02-16 16:33   ` 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=20250216162130.0de4f148@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=Jonathan.Santos@analog.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=jonath4nns@gmail.com \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo.schmitt1@gmail.com \
    --cc=marcelo.schmitt@analog.com \
    --cc=robh@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).