Commit b217d7a8 authored by JM Friedt's avatar JM Friedt Committed by Sasha Levin

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

[ Upstream commit 09f4dcc9 ]

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>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 908e6590
...@@ -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