[PATCH] iio: adc: ad4000: fix reading unsigned data

David Lechner posted 1 patch 3 weeks, 4 days ago
drivers/iio/adc/ad4000.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] iio: adc: ad4000: fix reading unsigned data
Posted by David Lechner 3 weeks, 4 days ago
Fix reading unsigned data from the AD4000 ADC via the _raw sysfs
attribute by ensuring that *val is set before returning from
ad4000_single_conversion(). This was not being set in any code path
and was causing the attribute to return a random value.

Fixes: 938fd562b974 ("iio: adc: Add support for AD4000")
Signed-off-by: David Lechner <dlechner@baylibre.com>
---
FYI, there is also another unrelated bug I noticed but didn't fix.

We are calling iio_push_to_buffers_with_timestamp() but there isn't
actually a IIO_CHAN_SOFT_TIMESTAMP() channel. I assume the intention
was to have the timestamp channel?
---
 drivers/iio/adc/ad4000.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/iio/adc/ad4000.c b/drivers/iio/adc/ad4000.c
index 6ea491245084..fc9c9807f89d 100644
--- a/drivers/iio/adc/ad4000.c
+++ b/drivers/iio/adc/ad4000.c
@@ -344,6 +344,8 @@ static int ad4000_single_conversion(struct iio_dev *indio_dev,
 
 	if (chan->scan_type.sign == 's')
 		*val = sign_extend32(sample, chan->scan_type.realbits - 1);
+	else
+		*val = sample;
 
 	return IIO_VAL_INT;
 }

---
base-commit: fa4076314480bcb2bb32051027735b1cde07eea2
change-id: 20241030-iio-adc-ad4000-fix-reading-unsigned-data-88a1de88cf57

Best regards,
-- 
David Lechner <dlechner@baylibre.com>
Re: [PATCH] iio: adc: ad4000: fix reading unsigned data
Posted by Jonathan Cameron 3 weeks, 3 days ago
On Wed, 30 Oct 2024 16:09:41 -0500
David Lechner <dlechner@baylibre.com> wrote:

> Fix reading unsigned data from the AD4000 ADC via the _raw sysfs
> attribute by ensuring that *val is set before returning from
> ad4000_single_conversion(). This was not being set in any code path
> and was causing the attribute to return a random value.
> 
> Fixes: 938fd562b974 ("iio: adc: Add support for AD4000")
> Signed-off-by: David Lechner <dlechner@baylibre.com>
Applied.
> ---
> FYI, there is also another unrelated bug I noticed but didn't fix.
> 
> We are calling iio_push_to_buffers_with_timestamp() but there isn't
> actually a IIO_CHAN_SOFT_TIMESTAMP() channel. I assume the intention
> was to have the timestamp channel?

Technically harmless as it can never be turned on, but indeed seems
doubtful - maybe something to treat as a feature rather than a fix though
given it was never there.

> ---
>  drivers/iio/adc/ad4000.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/iio/adc/ad4000.c b/drivers/iio/adc/ad4000.c
> index 6ea491245084..fc9c9807f89d 100644
> --- a/drivers/iio/adc/ad4000.c
> +++ b/drivers/iio/adc/ad4000.c
> @@ -344,6 +344,8 @@ static int ad4000_single_conversion(struct iio_dev *indio_dev,
>  
>  	if (chan->scan_type.sign == 's')
>  		*val = sign_extend32(sample, chan->scan_type.realbits - 1);
> +	else
> +		*val = sample;
>  
>  	return IIO_VAL_INT;
>  }
> 
> ---
> base-commit: fa4076314480bcb2bb32051027735b1cde07eea2
> change-id: 20241030-iio-adc-ad4000-fix-reading-unsigned-data-88a1de88cf57
> 
> Best regards,