Re: [PATCH v6 07/17] iio: adc: at91-sama5d2_adc: adapt the driver for sama7d65

Jonathan Cameron <[email protected]>
Newsgroups org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-iio,org.kernel.vger.linux-kernel
Message-ID <20260815212113.65e60919@jic23-huawei>
On Thu, 6 Aug 2026 13:10:14 +0530
Varshini Rajendran <[email protected]> wrote:

> Add support for sama7d65 ADC. The differences are highlighted with the
> compatible. The calibration data layout is the main difference.
> 
> Update Kconfig help text to mention SAMA7 SoC family support.
> 
> Signed-off-by: Varshini Rajendran <[email protected]>

The Sashiko feedback on this one is interesting.

https://sashiko.dev/#/patchset/20260806074024.531259-1-varshini.rajendran%40microchip.com

The timestamp in the chan_spec array isn't the last one - the
timestamp comes after it which is going to break in various
unhelpful ways - as iio_push_to_buffers_with_timestamp() requires
the timestamp to be the last scan index.

in at91_adc_trigger_handler_nodma() there is a comment saying
that it can only be used with voltage channels. That's fine but
if they aren't useful, why are the scan_index values not -1
which is how we hide those interfaces for channels for which
buffered capture is not supported.

Given you have the hardware set up, can you check if the
scan_elements/*_en is there for the temp channel and
that for cases where it is enabled, we get an error in the
buffer preenable callback?

So I think it's a false positive but fair enough given the
current user interfaces seems likely to be rather odd.

Please sanity check all this.

One other thing inline.

Jonathan


> ---
>  drivers/iio/adc/Kconfig            |  2 +-
>  drivers/iio/adc/at91-sama5d2_adc.c | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 31 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
> index 3755a81c1efd..85b443853a08 100644
> --- a/drivers/iio/adc/Kconfig
> +++ b/drivers/iio/adc/Kconfig
> @@ -647,7 +647,7 @@ config AT91_SAMA5D2_ADC
>  	select IIO_TRIGGERED_BUFFER
>  	help
>  	  Say yes here to build support for Atmel SAMA5D2 ADC which is
> -	  available on SAMA5D2 SoC family.
> +	  available on SAMA5D2 and SAMA7 SoC families.
>  
>  	  To compile this driver as a module, choose M here: the module will be
>  	  called at91-sama5d2_adc.
> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index 3e9feb824a66..c1e5139a058c 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -528,6 +528,15 @@ static const struct at91_adc_temp_calib_layout sama7g5_temp_calib = {
>  	.p1_scale = { .numerator = 1000, .denominator = 1 },
>  };
>  
> +static const struct at91_adc_temp_calib_layout sama7d65_temp_calib = {
> +	.tag_idx = 1,
> +	.p1_idx = 3,
> +	.p4_idx = 2,
> +	.p6_idx = 5,
> +	.min_len = 11,
> +	.p1_scale = { .numerator = 1, .denominator = 1000 },
> +};
> +
>  /* Temperature sensor calibration - Vtemp voltage sensitivity to temperature. */
>  #define AT91_ADC_TS_VTEMP_DT		(2080U)
>  
> @@ -766,6 +775,24 @@ static const struct at91_adc_platform sama7g5_platform = {
>  	.temp_calib_layout = &sama7g5_temp_calib,
>  };
>  
> +static const struct at91_adc_platform sama7d65_platform = {
> +	.layout = &sama7g5_layout,
> +	.adc_channels = &at91_sama7g5_adc_channels,
> +	.nr_channels = AT91_SAMA7G5_SINGLE_CHAN_CNT +
> +		       AT91_SAMA7G5_DIFF_CHAN_CNT +
> +		       AT91_SAMA7G5_TEMP_CHAN_CNT,
> +	.max_channels = ARRAY_SIZE(at91_sama7g5_adc_channels),
> +	.max_index = AT91_SAMA7G5_MAX_CHAN_IDX,
> +	.hw_trig_cnt = AT91_SAMA7G5_HW_TRIG_CNT,
> +	.osr_mask = GENMASK(18, 16),
> +	.oversampling_avail = { 1, 4, 16, 64, 256 },
> +	.oversampling_avail_no = 5,
> +	.chan_realbits = 16,
> +	.temp_sensor = true,
> +	.temp_chan = AT91_SAMA7G5_ADC_TEMP_CHANNEL,
Is this ever used?

> +	.temp_calib_layout = &sama7d65_temp_calib,
> +};
> +
>  static int at91_adc_chan_xlate(struct iio_dev *indio_dev, int chan)
>  {
>  	int i;
> @@ -2632,6 +2659,9 @@ static const struct of_device_id at91_adc_dt_match[] = {
>  	}, {
>  		.compatible = "microchip,sama7g5-adc",
>  		.data = &sama7g5_platform,
> +	}, {
> +		.compatible = "microchip,sama7d65-adc",
> +		.data = &sama7d65_platform,
>  	}, {
>  		/* sentinel */
>  	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.