]> git.karo-electronics.de Git - linux-beck.git/commitdiff
staging:iio:accel: lis3l02dq add writing for calibscale and calibbias.
authorJonathan Cameron <jic23@cam.ac.uk>
Wed, 18 May 2011 13:41:56 +0000 (14:41 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 19 May 2011 23:14:56 +0000 (16:14 -0700)
This was missed out in original chan_spec conversion.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/accel/lis3l02dq_core.c

index a6b46316e43aff5d55fcb6ea74766451a09940cd..8793ee42499361e7e8acb82dbddeb2f559feb3e2 100644 (file)
@@ -218,6 +218,34 @@ static int lis3l02dq_write_thresh(struct iio_dev *indio_dev,
                                           value);
 }
 
+static int lis3l02dq_write_raw(struct iio_dev *indio_dev,
+                              struct iio_chan_spec const *chan,
+                              int val,
+                              int val2,
+                              long mask)
+{
+       int ret = -EINVAL, reg;
+       u8 uval;
+       s8 sval;
+       switch (mask) {
+       case (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE):
+               if (val > 255 || val < -256)
+                       return -EINVAL;
+               sval = val;
+               reg = lis3l02dq_axis_map[LIS3L02DQ_BIAS][chan->address];
+               ret = lis3l02dq_spi_write_reg_8(indio_dev, reg, (u8 *)&sval);
+               break;
+       case (1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE):
+               if (val & ~0xFF)
+                       return -EINVAL;
+               uval = val;
+               reg = lis3l02dq_axis_map[LIS3L02DQ_GAIN][chan->address];
+               ret = lis3l02dq_spi_write_reg_8(indio_dev, reg, &uval);
+               break;
+       }
+       return ret;
+}
+
 static int lis3l02dq_read_raw(struct iio_dev *indio_dev,
                              struct iio_chan_spec const *chan,
                              int *val,
@@ -692,6 +720,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
        st->help.indio_dev->channels = lis3l02dq_channels;
        st->help.indio_dev->num_channels = ARRAY_SIZE(lis3l02dq_channels);
        st->help.indio_dev->read_raw = &lis3l02dq_read_raw;
+       st->help.indio_dev->write_raw = &lis3l02dq_write_raw;
        st->help.indio_dev->read_event_value = &lis3l02dq_read_thresh;
        st->help.indio_dev->write_event_value = &lis3l02dq_write_thresh;
        st->help.indio_dev->write_event_config = &lis3l02dq_write_event_config;