diff mbox series

[05/11] staging: iio: adt7316: fix the dac read calculation

Message ID 20181212005503.28054-6-jeremyfertic@gmail.com (mailing list archive)
State New, archived
Headers show
Series staging: iio: adt7316: dac fixes | expand

Commit Message

Jeremy Fertic Dec. 12, 2018, 12:54 a.m. UTC
The calculation of the current dac value is using the wrong bits of the
dac lsb register. Create two macros to shift the lsb register value into
lsb position, depending on whether the dac is 10 or 12 bit. Initialize
data to 0 so, with an 8 bit dac, the msb register value can be bitwise
ORed with data.

Signed-off-by: Jeremy Fertic <jeremyfertic@gmail.com>
---
 drivers/staging/iio/addac/adt7316.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Jonathan Cameron Dec. 16, 2018, 11:45 a.m. UTC | #1
On Tue, 11 Dec 2018 17:54:57 -0700
Jeremy Fertic <jeremyfertic@gmail.com> wrote:

> The calculation of the current dac value is using the wrong bits of the
> dac lsb register. Create two macros to shift the lsb register value into
> lsb position, depending on whether the dac is 10 or 12 bit. Initialize
> data to 0 so, with an 8 bit dac, the msb register value can be bitwise
> ORed with data.
> 
> Signed-off-by: Jeremy Fertic <jeremyfertic@gmail.com>
This looks good, but with the previous 2 patches under discussion I'll
hold this one for v2.

Thanks

Jonathan

> ---
>  drivers/staging/iio/addac/adt7316.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
> index eee7c04f93f4..b7d12d003ddc 100644
> --- a/drivers/staging/iio/addac/adt7316.c
> +++ b/drivers/staging/iio/addac/adt7316.c
> @@ -47,6 +47,8 @@
>  #define ADT7516_MSB_AIN3		0xA
>  #define ADT7516_MSB_AIN4		0xB
>  #define ADT7316_DA_DATA_BASE		0x10
> +#define ADT7316_DA_10_BIT_LSB_SHIFT	6
> +#define ADT7316_DA_12_BIT_LSB_SHIFT	4
>  #define ADT7316_DA_MSB_DATA_REGS	4
>  #define ADT7316_LSB_DAC_A		0x10
>  #define ADT7316_MSB_DAC_A		0x11
> @@ -1403,7 +1405,7 @@ static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
>  static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
>  				int channel, char *buf)
>  {
> -	u16 data;
> +	u16 data = 0;
>  	u8 msb, lsb, offset;
>  	int ret;
>  
> @@ -1428,7 +1430,11 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
>  	if (ret)
>  		return -EIO;
>  
> -	data = (msb << offset) + (lsb & ((1 << offset) - 1));
> +	if (chip->dac_bits == 12)
> +		data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
> +	else if (chip->dac_bits == 10)
> +		data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
> +	data |= msb << offset;
>  
>  	return sprintf(buf, "%d\n", data);
>  }
diff mbox series

Patch

diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
index eee7c04f93f4..b7d12d003ddc 100644
--- a/drivers/staging/iio/addac/adt7316.c
+++ b/drivers/staging/iio/addac/adt7316.c
@@ -47,6 +47,8 @@ 
 #define ADT7516_MSB_AIN3		0xA
 #define ADT7516_MSB_AIN4		0xB
 #define ADT7316_DA_DATA_BASE		0x10
+#define ADT7316_DA_10_BIT_LSB_SHIFT	6
+#define ADT7316_DA_12_BIT_LSB_SHIFT	4
 #define ADT7316_DA_MSB_DATA_REGS	4
 #define ADT7316_LSB_DAC_A		0x10
 #define ADT7316_MSB_DAC_A		0x11
@@ -1403,7 +1405,7 @@  static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
 static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
 				int channel, char *buf)
 {
-	u16 data;
+	u16 data = 0;
 	u8 msb, lsb, offset;
 	int ret;
 
@@ -1428,7 +1430,11 @@  static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
 	if (ret)
 		return -EIO;
 
-	data = (msb << offset) + (lsb & ((1 << offset) - 1));
+	if (chip->dac_bits == 12)
+		data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
+	else if (chip->dac_bits == 10)
+		data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
+	data |= msb << offset;
 
 	return sprintf(buf, "%d\n", data);
 }