From: Lars-Peter Clausen <l...@metafoo.de>

3.12-stable review patch.  If anyone has any objections, please let me know.

===============

commit 7abad1063deb0f77d275c61f58863ec319c58c5c upstream.

The different devices support by the adis16480 driver have slightly
different scales for the gyroscope and accelerometer channels.

Signed-off-by: Lars-Peter Clausen <l...@metafoo.de>
Signed-off-by: Jonathan Cameron <ji...@kernel.org>
Signed-off-by: Jiri Slaby <jsl...@suse.cz>
---
 drivers/iio/imu/adis16480.c | 39 +++++++++++++++++++++++++++++++++------
 1 file changed, 33 insertions(+), 6 deletions(-)

diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
index dd4206cac62d..5e1b117d4e3b 100644
--- a/drivers/iio/imu/adis16480.c
+++ b/drivers/iio/imu/adis16480.c
@@ -110,6 +110,10 @@
 struct adis16480_chip_info {
        unsigned int num_channels;
        const struct iio_chan_spec *channels;
+       unsigned int gyro_max_val;
+       unsigned int gyro_max_scale;
+       unsigned int accel_max_val;
+       unsigned int accel_max_scale;
 };
 
 struct adis16480 {
@@ -533,19 +537,21 @@ static int adis16480_set_filter_freq(struct iio_dev 
*indio_dev,
 static int adis16480_read_raw(struct iio_dev *indio_dev,
        const struct iio_chan_spec *chan, int *val, int *val2, long info)
 {
+       struct adis16480 *st = iio_priv(indio_dev);
+
        switch (info) {
        case IIO_CHAN_INFO_RAW:
                return adis_single_conversion(indio_dev, chan, 0, val);
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_ANGL_VEL:
-                       *val = 0;
-                       *val2 = IIO_DEGREE_TO_RAD(20000); /* 0.02 degree/sec */
-                       return IIO_VAL_INT_PLUS_MICRO;
+                       *val = st->chip_info->gyro_max_scale;
+                       *val2 = st->chip_info->gyro_max_val;
+                       return IIO_VAL_FRACTIONAL;
                case IIO_ACCEL:
-                       *val = 0;
-                       *val2 = IIO_G_TO_M_S_2(800); /* 0.8 mg */
-                       return IIO_VAL_INT_PLUS_MICRO;
+                       *val = st->chip_info->accel_max_scale;
+                       *val2 = st->chip_info->accel_max_val;
+                       return IIO_VAL_FRACTIONAL;
                case IIO_MAGN:
                        *val = 0;
                        *val2 = 100; /* 0.0001 gauss */
@@ -702,18 +708,39 @@ static const struct adis16480_chip_info 
adis16480_chip_info[] = {
        [ADIS16375] = {
                .channels = adis16485_channels,
                .num_channels = ARRAY_SIZE(adis16485_channels),
+               /*
+                * storing the value in rad/degree and the scale in degree
+                * gives us the result in rad and better precession than
+                * storing the scale directly in rad.
+                */
+               .gyro_max_val = IIO_RAD_TO_DEGREE(22887),
+               .gyro_max_scale = 300,
+               .accel_max_val = IIO_M_S_2_TO_G(21973),
+               .accel_max_scale = 18,
        },
        [ADIS16480] = {
                .channels = adis16480_channels,
                .num_channels = ARRAY_SIZE(adis16480_channels),
+               .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
+               .gyro_max_scale = 450,
+               .accel_max_val = IIO_M_S_2_TO_G(12500),
+               .accel_max_scale = 5,
        },
        [ADIS16485] = {
                .channels = adis16485_channels,
                .num_channels = ARRAY_SIZE(adis16485_channels),
+               .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
+               .gyro_max_scale = 450,
+               .accel_max_val = IIO_M_S_2_TO_G(20000),
+               .accel_max_scale = 5,
        },
        [ADIS16488] = {
                .channels = adis16480_channels,
                .num_channels = ARRAY_SIZE(adis16480_channels),
+               .gyro_max_val = IIO_RAD_TO_DEGREE(22500),
+               .gyro_max_scale = 450,
+               .accel_max_val = IIO_M_S_2_TO_G(22500),
+               .accel_max_scale = 18,
        },
 };
 
-- 
2.6.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to