Commit 09f4dcc9 authored by JM Friedt's avatar JM Friedt Committed by Jonathan Cameron

iio: DAC: ad5624r_spi: fix bit shift of output data value

The value sent on the SPI bus is shifted by an erroneous number of bits.
The shift value was already computed in the iio_chan_spec structure and
hence subtracting this argument to 16 yields an erroneous data position
in the SPI stream.
Signed-off-by: default avatarJM Friedt <jmfriedt@femto-st.fr>
Acked-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Cc: <Stable@vger.kernel.org>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 86d24f04
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include "ad5624r.h" #include "ad5624r.h"
static int ad5624r_spi_write(struct spi_device *spi, static int ad5624r_spi_write(struct spi_device *spi,
u8 cmd, u8 addr, u16 val, u8 len) u8 cmd, u8 addr, u16 val, u8 shift)
{ {
u32 data; u32 data;
u8 msg[3]; u8 msg[3];
...@@ -35,7 +35,7 @@ static int ad5624r_spi_write(struct spi_device *spi, ...@@ -35,7 +35,7 @@ static int ad5624r_spi_write(struct spi_device *spi,
* 14-, 12-bit input code followed by 0, 2, or 4 don't care bits, * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits,
* for the AD5664R, AD5644R, and AD5624R, respectively. * for the AD5664R, AD5644R, and AD5624R, respectively.
*/ */
data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << (16 - len)); data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << shift);
msg[0] = data >> 16; msg[0] = data >> 16;
msg[1] = data >> 8; msg[1] = data >> 8;
msg[2] = data; msg[2] = data;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment