diff mbox series

staging:iio:ad7606: fix voltage scales

Message ID 20180913073920.16089-1-alexandru.ardelean@analog.com (mailing list archive)
State New, archived
Headers show
Series staging:iio:ad7606: fix voltage scales | expand

Commit Message

Alexandru Ardelean Sept. 13, 2018, 7:39 a.m. UTC
Fixes commit 17be2a2905a6ec9aa27cd59521495e2f490d2af0 ("staging: iio:
ad7606: replace range/range_available with corresponding scale").

The AD7606 devices don't have a 2.5V voltage range, they have 5V & 10V
voltage range, which is selectable via the `gpio_range` descriptor.

The scales also seem to have been miscomputed, because when they were
applied to the raw values, the results differ from the expected values.
After checking the ADC transfer function in the datasheet, these were
re-computed.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/staging/iio/adc/ad7606.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Alexandru Ardelean Sept. 13, 2018, 8:41 a.m. UTC | #1
On Thu, 2018-09-13 at 10:39 +0300, Alexandru Ardelean wrote:
> Fixes commit 17be2a2905a6ec9aa27cd59521495e2f490d2af0 ("staging: iio:
> ad7606: replace range/range_available with corresponding scale").
> 
> The AD7606 devices don't have a 2.5V voltage range, they have 5V & 10V
> voltage range, which is selectable via the `gpio_range` descriptor.
> 
> The scales also seem to have been miscomputed, because when they were
> applied to the raw values, the results differ from the expected values.
> After checking the ADC transfer function in the datasheet, these were
> re-computed.
> 
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
> ---
>  drivers/staging/iio/adc/ad7606.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/ad7606.c
> b/drivers/staging/iio/adc/ad7606.c
> index c5fe3003075b..8f0eebf7316d 100644
> --- a/drivers/staging/iio/adc/ad7606.c
> +++ b/drivers/staging/iio/adc/ad7606.c
> @@ -26,9 +26,11 @@
>  
>  #include "ad7606.h"
>  
> -/* Scales are computed as 2.5/2**16 and 5/2**16 respectively */
> +/* Scales are computed as 5000/2**16 and 10000/2**16 respectively,
Will send a V2.
My computation of 32768 [which is mentioned in the datasheet] is also
wrong. So, this comment is wrong.

> + * so that when applied to the raw values they provide mV values
> + */
>  static const unsigned int scale_avail[2][2] = {
> -	{0, 38147}, {0, 76294}
> +	{0, 152588}, {0, 305176}
>  };
>  
>  static int ad7606_reset(struct ad7606_state *st)
diff mbox series

Patch

diff --git a/drivers/staging/iio/adc/ad7606.c b/drivers/staging/iio/adc/ad7606.c
index c5fe3003075b..8f0eebf7316d 100644
--- a/drivers/staging/iio/adc/ad7606.c
+++ b/drivers/staging/iio/adc/ad7606.c
@@ -26,9 +26,11 @@ 
 
 #include "ad7606.h"
 
-/* Scales are computed as 2.5/2**16 and 5/2**16 respectively */
+/* Scales are computed as 5000/2**16 and 10000/2**16 respectively,
+ * so that when applied to the raw values they provide mV values
+ */
 static const unsigned int scale_avail[2][2] = {
-	{0, 38147}, {0, 76294}
+	{0, 152588}, {0, 305176}
 };
 
 static int ad7606_reset(struct ad7606_state *st)