]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Sep 2015 00:29:57 +0000 (17:29 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Sep 2015 00:29:57 +0000 (17:29 -0700)
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

queue-3.10/iio-add-inverse-unit-conversion-macros.patch [new file with mode: 0644]
queue-3.10/iio-adis16480-fix-scale-factors.patch [new file with mode: 0644]
queue-3.10/iio-bmg160-iio_buffer-and-iio_triggered_buffer-are-required.patch [new file with mode: 0644]
queue-3.10/series

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 (file)
index 0000000..a538ce1
--- /dev/null
@@ -0,0 +1,70 @@
+From c689a923c867eac40ed3826c1d9328edea8b6bc7 Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Wed, 5 Aug 2015 15:38:14 +0200
+Subject: iio: Add inverse unit conversion macros
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+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 <lars@metafoo.de>
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..d433198
--- /dev/null
@@ -0,0 +1,101 @@
+From 7abad1063deb0f77d275c61f58863ec319c58c5c Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Wed, 5 Aug 2015 15:38:15 +0200
+Subject: iio: adis16480: Fix scale factors
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+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 <lars@metafoo.de>
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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 (file)
index 0000000..a20849a
--- /dev/null
@@ -0,0 +1,33 @@
+From 06d2f6ca5a38abe92f1f3a132b331eee773868c3 Mon Sep 17 00:00:00 2001
+From: Markus Pargmann <mpa@pengutronix.de>
+Date: Wed, 29 Jul 2015 15:46:03 +0200
+Subject: iio: bmg160: IIO_BUFFER and IIO_TRIGGERED_BUFFER are required
+
+From: Markus Pargmann <mpa@pengutronix.de>
+
+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 <mpa@pengutronix.de>
+Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Signed-off-by: Jonathan Cameron <jic23@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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.
index 5214fb8f7b707a2fcabc3d58c79a1d4e4b309715..46025d858183d00fdf15eacd3f470ced145f5b78 100644 (file)
@@ -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