All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andy@kernel.org>
To: David Lechner <dlechner@baylibre.com>
Cc: "Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Angelo Dureghello" <adureghello@baylibre.com>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iio: adc: ad7606_spi: add offload scan mask check
Date: Fri, 2 May 2025 12:55:37 +0300	[thread overview]
Message-ID: <aBSWmeRaPg5U8f7v@smile.fi.intel.com> (raw)
In-Reply-To: <20250430-iio-adc-ad7606_spi-fix-offload-scan-mask-check-v1-1-8b165d9d6c0e@baylibre.com>

On Wed, Apr 30, 2025 at 04:41:58PM -0500, David Lechner wrote:
> Validate the scan mask when SPI offloading is being used.
> 
> Since this family of ADCs is simultaneous sampling, there isn't a way
> to selectively disable channels when reading sample data. (Technically,
> AD7616 has a sequencer so could have some control, but that is for
> another day).
> 
> For "regular" IIO triggered buffer reads, this isn't a problem and the
> IIO core will demux the data and ignore data from disabled channels.
> However, since SPI offloading is done completely in hardware, we don't
> have a way to do the same. So before this patch, if less than all
> channels were enabled, the data would be misplaced in the buffer.
> 
> By adding a check in update_scan_mode, we can fail to enable the buffer
> instead of having bad data returned to userspace.

...

> +static int ad7606_spi_update_scan_mode(struct iio_dev *indio_dev,
> +				       const unsigned long *scan_mask)
> +{
> +	struct ad7606_state *st = iio_priv(indio_dev);
> +
> +	if (st->offload_en) {
> +		DECLARE_BITMAP(bitmap, AD760X_MAX_CHANNELS);
> +
> +		bitmap_fill(bitmap, AD760X_MAX_CHANNELS);
> +
> +		/*
> +		 * SPI offload requires that all channels are enabled since
> +		 * there isn't a way to selectively disable channels that get
> +		 * read (this is simultaneous sampling ADC) and the DMA buffer
> +		 * has no way of demuxing the data to filter out unwanted
> +		 * channels.
> +		 */
> +		if (!bitmap_equal(bitmap, scan_mask,
> +				  st->chip_info->num_adc_channels))
> +			return -EINVAL;


No need to have the local variable, just make sure that bitmap_weigth(FOO) == FOO.

	if (... && bitmap_weight(FOO) != FOO)
		return -EINVAL;

> +	}
> +
> +	return 0;
> +}

-- 
With Best Regards,
Andy Shevchenko



      reply	other threads:[~2025-05-02  9:55 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-30 21:41 [PATCH] iio: adc: ad7606_spi: add offload scan mask check David Lechner
2025-05-02  9:55 ` Andy Shevchenko [this message]

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=aBSWmeRaPg5U8f7v@smile.fi.intel.com \
    --to=andy@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=adureghello@baylibre.com \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.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.