On 05/08/15 14:38, Lars-Peter Clausen wrote: > The different devices support by the adis16480 driver have slightly > different scales for the gyroscope and accelerometer channels. > > Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx> Applied to the togreg branch of iio.git and marked for stable. Thanks, Jonathan > --- > 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 989605d..b94bfd3 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 { > @@ -497,19 +501,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 */ > @@ -674,18 +680,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, > }, > }; > > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html