Patch "iio: adis16480: Fix scale factors" has been added to the 4.2-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
iio: adis16480: Fix scale factors
to the 4.2-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
iio-adis16480-fix-scale-factors.patch
and it can be found in the queue-4.2 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
7abad1063deb0f77d275c61f58863ec319c58c5cMon Sep 17 00:00:00 2001
From: Lars-Peter Clausen <[email protected]>
Date: Wed, 5 Aug 2015 15:38:15 +0200
Subject: iio: adis16480: Fix scale factors
From: Lars-Peter Clausen <[email protected]>
commit 7abad1063deb0f77d275c61f58863ec319c58c5c upstream.
The different devices support by the adis16480 driver have slightly different scales for the gyroscope and accelerometer channels.
--- drivers/iio/imu/adis16480.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-)
drivers/iio/imu/adis16480.c +33 -6
@@ -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 {
@@ -497,19 +501,21 @@ static int adis16480_set_filter_freq(strstatic 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 */
@@ -674,18 +680,39 @@ static const struct 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 , }, };
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/iio-adis16480-fix-scale-factors.patch queue-4.2/iio-add-inverse-unit-conversion-macros.patch queue-4.2/iio-adis16400-fix-adis16448-gyroscope-scale.patch