From: Greg Kroah-Hartman Date: Wed, 16 Sep 2015 00:29:57 +0000 (-0700) Subject: 3.10-stable patches X-Git-Tag: v3.10.89~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=91794c4f3c924f99c6338bb29f907836618b81a2;p=thirdparty%2Fkernel%2Fstable-queue.git 3.10-stable patches added patches: iio-add-inverse-unit-conversion-macros.patch iio-adis16480-fix-scale-factors.patch iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch --- diff --git a/queue-3.10/iio-add-inverse-unit-conversion-macros.patch b/queue-3.10/iio-add-inverse-unit-conversion-macros.patch new file mode 100644 index 00000000000..a538ce1b946 --- /dev/null +++ b/queue-3.10/iio-add-inverse-unit-conversion-macros.patch @@ -0,0 +1,70 @@ +From c689a923c867eac40ed3826c1d9328edea8b6bc7 Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Wed, 5 Aug 2015 15:38:14 +0200 +Subject: iio: Add inverse unit conversion macros + +From: Lars-Peter Clausen + +commit c689a923c867eac40ed3826c1d9328edea8b6bc7 upstream. + +Add inverse unit conversion macro to convert from standard IIO units to +units that might be used by some devices. + +Those are useful in combination with scale factors that are specified as +IIO_VAL_FRACTIONAL. Typically the denominator for those specifications will +contain the maximum raw value the sensor will generate and the numerator +the value it maps to in a specific unit. Sometimes datasheets specify those +in different units than the standard IIO units (e.g. degree/s instead of +rad/s) and so we need to do a unit conversion. + +From a mathematical point of view it does not make a difference whether we +apply the unit conversion to the numerator or the inverse unit conversion +to the denominator since (x / y) / z = x / (y * z). But as the denominator +is typically a larger value and we are rounding both the numerator and +denominator to integer values using the later method gives us a better +precision (E.g. the relative error is smaller if we round 8000.3 to 8000 +rather than rounding 8.3 to 8). + +This is where in inverse unit conversion macros will be used. + +Marked for stable as used by some upcoming fixes. + +Signed-off-by: Lars-Peter Clausen +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/iio/iio.h | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +--- a/include/linux/iio/iio.h ++++ b/include/linux/iio/iio.h +@@ -569,6 +569,15 @@ int iio_str_to_fixpoint(const char *str, + #define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL) + + /** ++ * IIO_RAD_TO_DEGREE() - Convert rad to degree ++ * @rad: A value in rad ++ * ++ * Returns the given value converted from rad to degree ++ */ ++#define IIO_RAD_TO_DEGREE(rad) \ ++ (((rad) * 18000000ULL + 314159ULL / 2) / 314159ULL) ++ ++/** + * IIO_G_TO_M_S_2() - Convert g to meter / second**2 + * @g: A value in g + * +@@ -576,4 +585,12 @@ int iio_str_to_fixpoint(const char *str, + */ + #define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL) + ++/** ++ * IIO_M_S_2_TO_G() - Convert meter / second**2 to g ++ * @ms2: A value in meter / second**2 ++ * ++ * Returns the given value converted from meter / second**2 to g ++ */ ++#define IIO_M_S_2_TO_G(ms2) (((ms2) * 100000ULL + 980665ULL / 2) / 980665ULL) ++ + #endif /* _INDUSTRIAL_IO_H_ */ diff --git a/queue-3.10/iio-adis16480-fix-scale-factors.patch b/queue-3.10/iio-adis16480-fix-scale-factors.patch new file mode 100644 index 00000000000..d433198a439 --- /dev/null +++ b/queue-3.10/iio-adis16480-fix-scale-factors.patch @@ -0,0 +1,101 @@ +From 7abad1063deb0f77d275c61f58863ec319c58c5c Mon Sep 17 00:00:00 2001 +From: Lars-Peter Clausen +Date: Wed, 5 Aug 2015 15:38:15 +0200 +Subject: iio: adis16480: Fix scale factors + +From: Lars-Peter Clausen + +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 +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/imu/adis16480.c | 39 +++++++++++++++++++++++++++++++++------ + 1 file changed, 33 insertions(+), 6 deletions(-) + +--- 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(str + 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 + [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, + }, + }; + diff --git a/queue-3.10/iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch b/queue-3.10/iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch new file mode 100644 index 00000000000..a20849ae76e --- /dev/null +++ b/queue-3.10/iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch @@ -0,0 +1,33 @@ +From 06d2f6ca5a38abe92f1f3a132b331eee773868c3 Mon Sep 17 00:00:00 2001 +From: Markus Pargmann +Date: Wed, 29 Jul 2015 15:46:03 +0200 +Subject: iio: bmg160: IIO_BUFFER and IIO_TRIGGERED_BUFFER are required + +From: Markus Pargmann + +commit 06d2f6ca5a38abe92f1f3a132b331eee773868c3 upstream. + +This patch adds selects for IIO_BUFFER and IIO_TRIGGERED_BUFFER. Without +IIO_BUFFER, the driver does not compile. + +Signed-off-by: Markus Pargmann +Reviewed-by: Srinivas Pandruvada +Signed-off-by: Jonathan Cameron +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/iio/gyro/Kconfig | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/iio/gyro/Kconfig ++++ b/drivers/iio/gyro/Kconfig +@@ -73,7 +73,8 @@ config IIO_ST_GYRO_SPI_3AXIS + config ITG3200 + tristate "InvenSense ITG3200 Digital 3-Axis Gyroscope I2C driver" + depends on I2C +- select IIO_TRIGGERED_BUFFER if IIO_BUFFER ++ select IIO_BUFFER ++ select IIO_TRIGGERED_BUFFER + help + Say yes here to add support for the InvenSense ITG3200 digital + 3-axis gyroscope sensor. diff --git a/queue-3.10/series b/queue-3.10/series index 5214fb8f7b7..46025d85818 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -1 +1,4 @@ drm-radeon-don-t-link-train-displayport-on-hpd-until-we-get-the-dpcd.patch +iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch +iio-add-inverse-unit-conversion-macros.patch +iio-adis16480-fix-scale-factors.patch