summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/gyro/adxrs450_core.c
diff options
context:
space:
mode:
authorMichael Hennerich <michael.hennerich@analog.com>2011-04-29 14:17:01 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-03 11:40:02 -0700
commit232b1648e5d54b1e3f73463b0b26348889f12ae3 (patch)
treeffc75710002cf11e4f1fc32b5b04b7965124dbc3 /drivers/staging/iio/gyro/adxrs450_core.c
parentcaca8c89c24d1fe1470aafacebe7d80910888235 (diff)
IIO: GYRO: ADXRS450: Add missing parity bit generation
Add missing parity bit generation. Failure to add the parity bit caused half of the register accesses to fail. Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/gyro/adxrs450_core.c')
-rw-r--r--drivers/staging/iio/gyro/adxrs450_core.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/staging/iio/gyro/adxrs450_core.c b/drivers/staging/iio/gyro/adxrs450_core.c
index c02e3ef40a0f..5671276580f0 100644
--- a/drivers/staging/iio/gyro/adxrs450_core.c
+++ b/drivers/staging/iio/gyro/adxrs450_core.c
@@ -59,6 +59,9 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
st->tx[2] = 0;
st->tx[3] = 0;
+ if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
+ st->tx[3] |= ADXRS450_P;
+
spi_message_init(&msg);
spi_message_add_tail(&xfers[0], &msg);
spi_message_add_tail(&xfers[1], &msg);
@@ -103,6 +106,10 @@ static int adxrs450_spi_write_reg_16(struct device *dev,
st->tx[1] = reg_address << 1 | val >> 15;
st->tx[2] = val >> 7;
st->tx[3] = val << 1;
+
+ if (!(hweight32(be32_to_cpu(*(u32 *)st->tx)) & 1))
+ st->tx[3] |= ADXRS450_P;
+
spi_message_init(&msg);
spi_message_add_tail(&xfers, &msg);
ret = spi_sync(st->us, &msg);