diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2012-10-15 10:35:00 +0100 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2012-10-19 16:23:33 +0100 |
commit | 7e72a54c08c3a3d296c11139774e13cc80424060 (patch) | |
tree | 5bc4f32ba0e477079deda0fb781222b8bf679983 | |
parent | acba41f81f4380ad24905df4c3c0ad7f272b338f (diff) | |
download | linux-3.10-7e72a54c08c3a3d296c11139774e13cc80424060.tar.gz linux-3.10-7e72a54c08c3a3d296c11139774e13cc80424060.tar.bz2 linux-3.10-7e72a54c08c3a3d296c11139774e13cc80424060.zip |
staging:iio: Fix adis16260 channel offsets and scales
Most of the channel offsets and scales in the adis16260 are incorrect:
* Temperature scale is off by a factor of 1000
* Voltage scale is off by a factor of 1000
* Temperature offset is completely wrong
This patch fixes these issues. Also use the IIO_DEGREE_TO_RAD for the angle
velocity since this makes it much easier to compare it to the value given in the
datasheet.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/staging/iio/gyro/adis16260_core.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c index 9571c03aa4c..aa964a2d829 100644 --- a/drivers/staging/iio/gyro/adis16260_core.c +++ b/drivers/staging/iio/gyro/adis16260_core.c @@ -498,28 +498,33 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, switch (chan->type) { case IIO_ANGL_VEL: *val = 0; - if (spi_get_device_id(st->us)->driver_data) - *val2 = 320; - else - *val2 = 1278; + if (spi_get_device_id(st->us)->driver_data) { + /* 0.01832 degree / sec */ + *val2 = IIO_DEGREE_TO_RAD(18320); + } else { + /* 0.07326 degree / sec */ + *val2 = IIO_DEGREE_TO_RAD(73260); + } return IIO_VAL_INT_PLUS_MICRO; case IIO_VOLTAGE: - *val = 0; - if (chan->channel == 0) - *val2 = 18315; - else - *val2 = 610500; + if (chan->channel == 0) { + *val = 1; + *val2 = 831500; /* 1.8315 mV */ + } else { + *val = 0; + *val2 = 610500; /* 610.5 uV */ + } return IIO_VAL_INT_PLUS_MICRO; case IIO_TEMP: - *val = 0; - *val2 = 145300; + *val = 145; + *val2 = 300000; /* 0.1453 C */ return IIO_VAL_INT_PLUS_MICRO; default: return -EINVAL; } break; case IIO_CHAN_INFO_OFFSET: - *val = 25; + *val = 250000 / 1453; /* 25 C = 0x00 */ return IIO_VAL_INT; case IIO_CHAN_INFO_CALIBBIAS: switch (chan->type) { |