diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2012-10-15 05:35:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2012-10-19 11:23:17 -0400 |
commit | 9cc19b81d7363f630593ad7ceab9fa12a105fc25 (patch) | |
tree | 5254b9aab6539d391f1999d4b3c6cb06949cc4a4 /drivers/staging | |
parent | 10dda40fb605c6468045906b0bce08e2e12c0aca (diff) |
staging:iio: Fix adis16204 channel offsets and scales
Most of the channel offsets and scales in the adis16204 are incorrect:
* Temperature scale is off by a factor of 1000
* Voltage scale is off by a factor of 1000
* Acceleration is scale is in g instead of m/(s**2)
* Temperature offset is completely wrong
This patch fixes these issues.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/iio/accel/adis16204_core.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index 05bdb7c2c8e3..c6234c2f46aa 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c | |||
@@ -317,26 +317,28 @@ static int adis16204_read_raw(struct iio_dev *indio_dev, | |||
317 | case IIO_CHAN_INFO_SCALE: | 317 | case IIO_CHAN_INFO_SCALE: |
318 | switch (chan->type) { | 318 | switch (chan->type) { |
319 | case IIO_VOLTAGE: | 319 | case IIO_VOLTAGE: |
320 | *val = 0; | 320 | if (chan->channel == 0) { |
321 | if (chan->channel == 0) | 321 | *val = 1; |
322 | *val2 = 1220; | 322 | *val2 = 220000; /* 1.22 mV */ |
323 | else | 323 | } else { |
324 | *val2 = 610; | 324 | *val = 0; |
325 | *val2 = 610000; /* 0.61 mV */ | ||
326 | } | ||
325 | return IIO_VAL_INT_PLUS_MICRO; | 327 | return IIO_VAL_INT_PLUS_MICRO; |
326 | case IIO_TEMP: | 328 | case IIO_TEMP: |
327 | *val = 0; | 329 | *val = -470; /* 0.47 C */ |
328 | *val2 = -470000; | 330 | *val2 = 0; |
329 | return IIO_VAL_INT_PLUS_MICRO; | 331 | return IIO_VAL_INT_PLUS_MICRO; |
330 | case IIO_ACCEL: | 332 | case IIO_ACCEL: |
331 | *val = 0; | 333 | *val = 0; |
332 | switch (chan->channel2) { | 334 | switch (chan->channel2) { |
333 | case IIO_MOD_X: | 335 | case IIO_MOD_X: |
334 | case IIO_MOD_ROOT_SUM_SQUARED_X_Y: | 336 | case IIO_MOD_ROOT_SUM_SQUARED_X_Y: |
335 | *val2 = 17125; | 337 | *val2 = IIO_G_TO_M_S_2(17125); /* 17.125 mg */ |
336 | break; | 338 | break; |
337 | case IIO_MOD_Y: | 339 | case IIO_MOD_Y: |
338 | case IIO_MOD_Z: | 340 | case IIO_MOD_Z: |
339 | *val2 = 8407; | 341 | *val2 = IIO_G_TO_M_S_2(8407); /* 8.407 mg */ |
340 | break; | 342 | break; |
341 | } | 343 | } |
342 | return IIO_VAL_INT_PLUS_MICRO; | 344 | return IIO_VAL_INT_PLUS_MICRO; |
@@ -345,7 +347,7 @@ static int adis16204_read_raw(struct iio_dev *indio_dev, | |||
345 | } | 347 | } |
346 | break; | 348 | break; |
347 | case IIO_CHAN_INFO_OFFSET: | 349 | case IIO_CHAN_INFO_OFFSET: |
348 | *val = 25; | 350 | *val = 25000 / -470 - 1278; /* 25 C = 1278 */ |
349 | return IIO_VAL_INT; | 351 | return IIO_VAL_INT; |
350 | case IIO_CHAN_INFO_CALIBBIAS: | 352 | case IIO_CHAN_INFO_CALIBBIAS: |
351 | case IIO_CHAN_INFO_PEAK: | 353 | case IIO_CHAN_INFO_PEAK: |