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: JM Friedt <jmfriedt@femto-st.fr> Acked-by: Lars-Peter Clausen <lars@metafoo.de> Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
fd1883f07c
commit
adfa969850
|
@ -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,
|
||||||
* 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;
|
||||||
|
|
Loading…
Reference in New Issue