IIO: GYRO: ADXRS450: Don't issue two messages, use two transfers
authorMichael Hennerich <michael.hennerich@analog.com>
Fri, 29 Apr 2011 12:16:59 +0000 (14:16 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 May 2011 18:40:01 +0000 (11:40 -0700)
Don't issue the same message twice, use two transfers and group them together

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>
drivers/staging/iio/gyro/adxrs450_core.c

index dcd88ff81a9075dd92ef58c9d5abfcc770f395ab..a1a71b7bcad3ca9ce4e44b46ba6cb86c99cda0a5 100644 (file)
@@ -40,29 +40,28 @@ static int adxrs450_spi_read_reg_16(struct device *dev,
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
        struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
        int ret;
-       struct spi_transfer xfers = {
-               .tx_buf = st->tx,
-               .rx_buf = st->rx,
-               .bits_per_word = 8,
-               .len = 4,
+       struct spi_transfer xfers[] = {
+               {
+                       .tx_buf = st->tx,
+                       .bits_per_word = 8,
+                       .len = 4,
+                       .cs_change = 1,
+               }, {
+                       .rx_buf = st->rx,
+                       .bits_per_word = 8,
+                       .len = 4,
+               },
        };
-       /* Needs to send the command twice to get the wanted value */
+
        mutex_lock(&st->buf_lock);
-       st->tx[0] = ADXRS450_READ_DATA | reg_address >> 7;
+       st->tx[0] = ADXRS450_READ_DATA | (reg_address >> 7);
        st->tx[1] = reg_address << 1;
        st->tx[2] = 0;
        st->tx[3] = 0;
-       spi_message_init(&msg);
-       spi_message_add_tail(&xfers, &msg);
-       ret = spi_sync(st->us, &msg);
-       if (ret) {
-               dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
-                               reg_address);
-               goto error_ret;
-       }
 
        spi_message_init(&msg);
-       spi_message_add_tail(&xfers, &msg);
+       spi_message_add_tail(&xfers[0], &msg);
+       spi_message_add_tail(&xfers[1], &msg);
        ret = spi_sync(st->us, &msg);
        if (ret) {
                dev_err(&st->us->dev, "problem while reading 16 bit register 0x%02x\n",
@@ -125,11 +124,17 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
        struct adxrs450_state *st = iio_dev_get_devdata(indio_dev);
        int ret;
-       struct spi_transfer xfers = {
-               .tx_buf = st->tx,
-               .rx_buf = st->rx,
-               .bits_per_word = 8,
-               .len = 4,
+       struct spi_transfer xfers[] = {
+               {
+                       .tx_buf = st->tx,
+                       .bits_per_word = 8,
+                       .len = 4,
+                       .cs_change = 1,
+               }, {
+                       .rx_buf = st->rx,
+                       .bits_per_word = 8,
+                       .len = 4,
+               },
        };
 
        mutex_lock(&st->buf_lock);
@@ -139,15 +144,8 @@ static int adxrs450_spi_sensor_data(struct device *dev, u16 *val)
        st->tx[3] = 0;
 
        spi_message_init(&msg);
-       spi_message_add_tail(&xfers, &msg);
-       ret = spi_sync(st->us, &msg);
-       if (ret) {
-               dev_err(&st->us->dev, "Problem while reading sensor data\n");
-               goto error_ret;
-       }
-
-       spi_message_init(&msg);
-       spi_message_add_tail(&xfers, &msg);
+       spi_message_add_tail(&xfers[0], &msg);
+       spi_message_add_tail(&xfers[1], &msg);
        ret = spi_sync(st->us, &msg);
        if (ret) {
                dev_err(&st->us->dev, "Problem while reading sensor data\n");