]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.12-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Aug 2025 07:33:03 +0000 (09:33 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Aug 2025 07:33:03 +0000 (09:33 +0200)
added patches:
iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch
iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch
iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch
iio-imu-inv_icm42600-use-instead-of-memset.patch

queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch [new file with mode: 0644]
queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch [new file with mode: 0644]
queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch [new file with mode: 0644]
queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch [new file with mode: 0644]
queue-6.12/series

diff --git a/queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch b/queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch
new file mode 100644 (file)
index 0000000..1725b05
--- /dev/null
@@ -0,0 +1,49 @@
+From stable+bounces-172734-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:15 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Aug 2025 09:39:03 -0400
+Subject: iio: imu: inv_icm42600: change invalid data error to -EBUSY
+To: stable@vger.kernel.org
+Cc: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>, Andy Shevchenko <andy@kernel.org>, Sean Nyekjaer <sean@geanix.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20250824133904.2896884-4-sashal@kernel.org>
+
+From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+
+[ Upstream commit dfdc31e7ccf3ac1d5ec01d5120c71e14745e3dd8 ]
+
+Temperature sensor returns the temperature of the mechanical parts
+of the chip. If both accel and gyro are off, the temperature sensor is
+also automatically turned off and returns invalid data.
+
+In this case, returning -EBUSY error code is better then -EINVAL and
+indicates userspace that it needs to retry reading temperature in
+another context.
+
+Fixes: bc3eb0207fb5 ("iio: imu: inv_icm42600: add temperature sensor support")
+Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+Cc: stable@vger.kernel.org
+Reviewed-by: Andy Shevchenko <andy@kernel.org>
+Reviewed-by: Sean Nyekjaer <sean@geanix.com>
+Link: https://patch.msgid.link/20250808-inv-icm42600-change-temperature-error-code-v1-1-986fbf63b77d@tdk.com
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
+@@ -32,8 +32,12 @@ static int inv_icm42600_temp_read(struct
+               goto exit;
+       *temp = (s16)be16_to_cpup(raw);
++      /*
++       * Temperature data is invalid if both accel and gyro are off.
++       * Return -EBUSY in this case.
++       */
+       if (*temp == INV_ICM42600_DATA_INVALID)
+-              ret = -EINVAL;
++              ret = -EBUSY;
+ exit:
+       mutex_unlock(&st->lock);
diff --git a/queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch b/queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch
new file mode 100644 (file)
index 0000000..98b4fac
--- /dev/null
@@ -0,0 +1,423 @@
+From stable+bounces-172733-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:13 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Aug 2025 09:39:02 -0400
+Subject: iio: imu: inv_icm42600: Convert to uXX and sXX integer types
+To: stable@vger.kernel.org
+Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20250824133904.2896884-3-sashal@kernel.org>
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+[ Upstream commit a4135386fa49c2a170b89296da12c4a3be2089d9 ]
+
+The driver code is full of intXX_t and uintXX_t types which is
+not the pattern we use in the IIO subsystem. Switch the driver
+to use kernel internal types for that. No functional changes.
+
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+Link: https://patch.msgid.link/20250616090423.575736-1-andriy.shevchenko@linux.intel.com
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/imu/inv_icm42600/inv_icm42600.h        |    8 ++--
+ drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c  |   26 +++++++--------
+ drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c |   22 ++++++------
+ drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h |   10 ++---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_core.c   |    6 +--
+ drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c   |   36 ++++++++++-----------
+ drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c   |    6 +--
+ 7 files changed, 57 insertions(+), 57 deletions(-)
+
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
+@@ -164,11 +164,11 @@ struct inv_icm42600_state {
+       struct inv_icm42600_suspended suspended;
+       struct iio_dev *indio_gyro;
+       struct iio_dev *indio_accel;
+-      uint8_t buffer[2] __aligned(IIO_DMA_MINALIGN);
++      u8 buffer[2] __aligned(IIO_DMA_MINALIGN);
+       struct inv_icm42600_fifo fifo;
+       struct {
+-              int64_t gyro;
+-              int64_t accel;
++              s64 gyro;
++              s64 accel;
+       } timestamp;
+ };
+@@ -410,7 +410,7 @@ const struct iio_mount_matrix *
+ inv_icm42600_get_mount_matrix(const struct iio_dev *indio_dev,
+                             const struct iio_chan_spec *chan);
+-uint32_t inv_icm42600_odr_to_period(enum inv_icm42600_odr odr);
++u32 inv_icm42600_odr_to_period(enum inv_icm42600_odr odr);
+ int inv_icm42600_set_accel_conf(struct inv_icm42600_state *st,
+                               struct inv_icm42600_sensor_conf *conf,
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+@@ -177,7 +177,7 @@ static const struct iio_chan_spec inv_ic
+  */
+ struct inv_icm42600_accel_buffer {
+       struct inv_icm42600_fifo_sensor_data accel;
+-      int16_t temp;
++      s16 temp;
+       aligned_s64 timestamp;
+ };
+@@ -241,7 +241,7 @@ out_unlock:
+ static int inv_icm42600_accel_read_sensor(struct iio_dev *indio_dev,
+                                         struct iio_chan_spec const *chan,
+-                                        int16_t *val)
++                                        s16 *val)
+ {
+       struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
+       struct inv_icm42600_sensor_state *accel_st = iio_priv(indio_dev);
+@@ -284,7 +284,7 @@ static int inv_icm42600_accel_read_senso
+       if (ret)
+               goto exit;
+-      *val = (int16_t)be16_to_cpup(data);
++      *val = (s16)be16_to_cpup(data);
+       if (*val == INV_ICM42600_DATA_INVALID)
+               ret = -EINVAL;
+ exit:
+@@ -492,11 +492,11 @@ static int inv_icm42600_accel_read_offse
+                                         int *val, int *val2)
+ {
+       struct device *dev = regmap_get_device(st->map);
+-      int64_t val64;
+-      int32_t bias;
++      s64 val64;
++      s32 bias;
+       unsigned int reg;
+-      int16_t offset;
+-      uint8_t data[2];
++      s16 offset;
++      u8 data[2];
+       int ret;
+       if (chan->type != IIO_ACCEL)
+@@ -550,7 +550,7 @@ static int inv_icm42600_accel_read_offse
+        * result in micro (1000000)
+        * (offset * 5 * 9.806650 * 1000000) / 10000
+        */
+-      val64 = (int64_t)offset * 5LL * 9806650LL;
++      val64 = (s64)offset * 5LL * 9806650LL;
+       /* for rounding, add + or - divisor (10000) divided by 2 */
+       if (val64 >= 0)
+               val64 += 10000LL / 2LL;
+@@ -568,10 +568,10 @@ static int inv_icm42600_accel_write_offs
+                                          int val, int val2)
+ {
+       struct device *dev = regmap_get_device(st->map);
+-      int64_t val64;
+-      int32_t min, max;
++      s64 val64;
++      s32 min, max;
+       unsigned int reg, regval;
+-      int16_t offset;
++      s16 offset;
+       int ret;
+       if (chan->type != IIO_ACCEL)
+@@ -596,7 +596,7 @@ static int inv_icm42600_accel_write_offs
+             inv_icm42600_accel_calibbias[1];
+       max = inv_icm42600_accel_calibbias[4] * 1000000L +
+             inv_icm42600_accel_calibbias[5];
+-      val64 = (int64_t)val * 1000000LL + (int64_t)val2;
++      val64 = (s64)val * 1000000LL + (s64)val2;
+       if (val64 < min || val64 > max)
+               return -EINVAL;
+@@ -671,7 +671,7 @@ static int inv_icm42600_accel_read_raw(s
+                                      int *val, int *val2, long mask)
+ {
+       struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
+-      int16_t data;
++      s16 data;
+       int ret;
+       switch (chan->type) {
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
+@@ -26,28 +26,28 @@
+ #define INV_ICM42600_FIFO_HEADER_ODR_GYRO     BIT(0)
+ struct inv_icm42600_fifo_1sensor_packet {
+-      uint8_t header;
++      u8 header;
+       struct inv_icm42600_fifo_sensor_data data;
+-      int8_t temp;
++      s8 temp;
+ } __packed;
+ #define INV_ICM42600_FIFO_1SENSOR_PACKET_SIZE         8
+ struct inv_icm42600_fifo_2sensors_packet {
+-      uint8_t header;
++      u8 header;
+       struct inv_icm42600_fifo_sensor_data accel;
+       struct inv_icm42600_fifo_sensor_data gyro;
+-      int8_t temp;
++      s8 temp;
+       __be16 timestamp;
+ } __packed;
+ #define INV_ICM42600_FIFO_2SENSORS_PACKET_SIZE                16
+ ssize_t inv_icm42600_fifo_decode_packet(const void *packet, const void **accel,
+-                                      const void **gyro, const int8_t **temp,
++                                      const void **gyro, const s8 **temp,
+                                       const void **timestamp, unsigned int *odr)
+ {
+       const struct inv_icm42600_fifo_1sensor_packet *pack1 = packet;
+       const struct inv_icm42600_fifo_2sensors_packet *pack2 = packet;
+-      uint8_t header = *((const uint8_t *)packet);
++      u8 header = *((const u8 *)packet);
+       /* FIFO empty */
+       if (header & INV_ICM42600_FIFO_HEADER_MSG) {
+@@ -100,7 +100,7 @@ ssize_t inv_icm42600_fifo_decode_packet(
+ void inv_icm42600_buffer_update_fifo_period(struct inv_icm42600_state *st)
+ {
+-      uint32_t period_gyro, period_accel, period;
++      u32 period_gyro, period_accel, period;
+       if (st->fifo.en & INV_ICM42600_SENSOR_GYRO)
+               period_gyro = inv_icm42600_odr_to_period(st->conf.gyro.odr);
+@@ -204,8 +204,8 @@ int inv_icm42600_buffer_update_watermark
+ {
+       size_t packet_size, wm_size;
+       unsigned int wm_gyro, wm_accel, watermark;
+-      uint32_t period_gyro, period_accel, period;
+-      uint32_t latency_gyro, latency_accel, latency;
++      u32 period_gyro, period_accel, period;
++      u32 latency_gyro, latency_accel, latency;
+       bool restore;
+       __le16 raw_wm;
+       int ret;
+@@ -459,7 +459,7 @@ int inv_icm42600_buffer_fifo_read(struct
+       __be16 *raw_fifo_count;
+       ssize_t i, size;
+       const void *accel, *gyro, *timestamp;
+-      const int8_t *temp;
++      const s8 *temp;
+       unsigned int odr;
+       int ret;
+@@ -550,7 +550,7 @@ int inv_icm42600_buffer_hwfifo_flush(str
+       struct inv_icm42600_sensor_state *gyro_st = iio_priv(st->indio_gyro);
+       struct inv_icm42600_sensor_state *accel_st = iio_priv(st->indio_accel);
+       struct inv_sensors_timestamp *ts;
+-      int64_t gyro_ts, accel_ts;
++      s64 gyro_ts, accel_ts;
+       int ret;
+       gyro_ts = iio_get_time_ns(st->indio_gyro);
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
+@@ -28,7 +28,7 @@ struct inv_icm42600_state;
+ struct inv_icm42600_fifo {
+       unsigned int on;
+       unsigned int en;
+-      uint32_t period;
++      u32 period;
+       struct {
+               unsigned int gyro;
+               unsigned int accel;
+@@ -41,7 +41,7 @@ struct inv_icm42600_fifo {
+               size_t accel;
+               size_t total;
+       } nb;
+-      uint8_t data[2080] __aligned(IIO_DMA_MINALIGN);
++      u8 data[2080] __aligned(IIO_DMA_MINALIGN);
+ };
+ /* FIFO data packet */
+@@ -52,7 +52,7 @@ struct inv_icm42600_fifo_sensor_data {
+ } __packed;
+ #define INV_ICM42600_FIFO_DATA_INVALID                -32768
+-static inline int16_t inv_icm42600_fifo_get_sensor_data(__be16 d)
++static inline s16 inv_icm42600_fifo_get_sensor_data(__be16 d)
+ {
+       return be16_to_cpu(d);
+ }
+@@ -60,7 +60,7 @@ static inline int16_t inv_icm42600_fifo_
+ static inline bool
+ inv_icm42600_fifo_is_data_valid(const struct inv_icm42600_fifo_sensor_data *s)
+ {
+-      int16_t x, y, z;
++      s16 x, y, z;
+       x = inv_icm42600_fifo_get_sensor_data(s->x);
+       y = inv_icm42600_fifo_get_sensor_data(s->y);
+@@ -75,7 +75,7 @@ inv_icm42600_fifo_is_data_valid(const st
+ }
+ ssize_t inv_icm42600_fifo_decode_packet(const void *packet, const void **accel,
+-                                      const void **gyro, const int8_t **temp,
++                                      const void **gyro, const s8 **temp,
+                                       const void **timestamp, unsigned int *odr);
+ extern const struct iio_buffer_setup_ops inv_icm42600_buffer_ops;
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
+@@ -103,7 +103,7 @@ const struct regmap_config inv_icm42600_
+ EXPORT_SYMBOL_NS_GPL(inv_icm42600_spi_regmap_config, IIO_ICM42600);
+ struct inv_icm42600_hw {
+-      uint8_t whoami;
++      u8 whoami;
+       const char *name;
+       const struct inv_icm42600_conf *conf;
+ };
+@@ -188,9 +188,9 @@ inv_icm42600_get_mount_matrix(const stru
+       return &st->orientation;
+ }
+-uint32_t inv_icm42600_odr_to_period(enum inv_icm42600_odr odr)
++u32 inv_icm42600_odr_to_period(enum inv_icm42600_odr odr)
+ {
+-      static uint32_t odr_periods[INV_ICM42600_ODR_NB] = {
++      static u32 odr_periods[INV_ICM42600_ODR_NB] = {
+               /* reserved values */
+               0, 0, 0,
+               /* 8kHz */
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+@@ -77,7 +77,7 @@ static const struct iio_chan_spec inv_ic
+  */
+ struct inv_icm42600_gyro_buffer {
+       struct inv_icm42600_fifo_sensor_data gyro;
+-      int16_t temp;
++      s16 temp;
+       aligned_s64 timestamp;
+ };
+@@ -139,7 +139,7 @@ out_unlock:
+ static int inv_icm42600_gyro_read_sensor(struct inv_icm42600_state *st,
+                                        struct iio_chan_spec const *chan,
+-                                       int16_t *val)
++                                       s16 *val)
+ {
+       struct device *dev = regmap_get_device(st->map);
+       struct inv_icm42600_sensor_conf conf = INV_ICM42600_SENSOR_CONF_INIT;
+@@ -179,7 +179,7 @@ static int inv_icm42600_gyro_read_sensor
+       if (ret)
+               goto exit;
+-      *val = (int16_t)be16_to_cpup(data);
++      *val = (s16)be16_to_cpup(data);
+       if (*val == INV_ICM42600_DATA_INVALID)
+               ret = -EINVAL;
+ exit:
+@@ -399,11 +399,11 @@ static int inv_icm42600_gyro_read_offset
+                                        int *val, int *val2)
+ {
+       struct device *dev = regmap_get_device(st->map);
+-      int64_t val64;
+-      int32_t bias;
++      s64 val64;
++      s32 bias;
+       unsigned int reg;
+-      int16_t offset;
+-      uint8_t data[2];
++      s16 offset;
++      u8 data[2];
+       int ret;
+       if (chan->type != IIO_ANGL_VEL)
+@@ -457,7 +457,7 @@ static int inv_icm42600_gyro_read_offset
+        * result in nano (1000000000)
+        * (offset * 64 * Pi * 1000000000) / (2048 * 180)
+        */
+-      val64 = (int64_t)offset * 64LL * 3141592653LL;
++      val64 = (s64)offset * 64LL * 3141592653LL;
+       /* for rounding, add + or - divisor (2048 * 180) divided by 2 */
+       if (val64 >= 0)
+               val64 += 2048 * 180 / 2;
+@@ -475,9 +475,9 @@ static int inv_icm42600_gyro_write_offse
+                                         int val, int val2)
+ {
+       struct device *dev = regmap_get_device(st->map);
+-      int64_t val64, min, max;
++      s64 val64, min, max;
+       unsigned int reg, regval;
+-      int16_t offset;
++      s16 offset;
+       int ret;
+       if (chan->type != IIO_ANGL_VEL)
+@@ -498,11 +498,11 @@ static int inv_icm42600_gyro_write_offse
+       }
+       /* inv_icm42600_gyro_calibbias: min - step - max in nano */
+-      min = (int64_t)inv_icm42600_gyro_calibbias[0] * 1000000000LL +
+-            (int64_t)inv_icm42600_gyro_calibbias[1];
+-      max = (int64_t)inv_icm42600_gyro_calibbias[4] * 1000000000LL +
+-            (int64_t)inv_icm42600_gyro_calibbias[5];
+-      val64 = (int64_t)val * 1000000000LL + (int64_t)val2;
++      min = (s64)inv_icm42600_gyro_calibbias[0] * 1000000000LL +
++            (s64)inv_icm42600_gyro_calibbias[1];
++      max = (s64)inv_icm42600_gyro_calibbias[4] * 1000000000LL +
++            (s64)inv_icm42600_gyro_calibbias[5];
++      val64 = (s64)val * 1000000000LL + (s64)val2;
+       if (val64 < min || val64 > max)
+               return -EINVAL;
+@@ -577,7 +577,7 @@ static int inv_icm42600_gyro_read_raw(st
+                                     int *val, int *val2, long mask)
+ {
+       struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
+-      int16_t data;
++      s16 data;
+       int ret;
+       switch (chan->type) {
+@@ -806,9 +806,9 @@ int inv_icm42600_gyro_parse_fifo(struct
+       ssize_t i, size;
+       unsigned int no;
+       const void *accel, *gyro, *timestamp;
+-      const int8_t *temp;
++      const s8 *temp;
+       unsigned int odr;
+-      int64_t ts_val;
++      s64 ts_val;
+       /* buffer is copied to userspace, zeroing it to avoid any data leak */
+       struct inv_icm42600_gyro_buffer buffer = { };
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
+@@ -13,7 +13,7 @@
+ #include "inv_icm42600.h"
+ #include "inv_icm42600_temp.h"
+-static int inv_icm42600_temp_read(struct inv_icm42600_state *st, int16_t *temp)
++static int inv_icm42600_temp_read(struct inv_icm42600_state *st, s16 *temp)
+ {
+       struct device *dev = regmap_get_device(st->map);
+       __be16 *raw;
+@@ -31,7 +31,7 @@ static int inv_icm42600_temp_read(struct
+       if (ret)
+               goto exit;
+-      *temp = (int16_t)be16_to_cpup(raw);
++      *temp = (s16)be16_to_cpup(raw);
+       if (*temp == INV_ICM42600_DATA_INVALID)
+               ret = -EINVAL;
+@@ -48,7 +48,7 @@ int inv_icm42600_temp_read_raw(struct ii
+                              int *val, int *val2, long mask)
+ {
+       struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
+-      int16_t temp;
++      s16 temp;
+       int ret;
+       if (chan->type != IIO_TEMP)
diff --git a/queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch b/queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch
new file mode 100644 (file)
index 0000000..ab38152
--- /dev/null
@@ -0,0 +1,52 @@
+From stable+bounces-172731-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:11 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Aug 2025 09:39:00 -0400
+Subject: iio: imu: inv_icm42600: switch timestamp type from int64_t __aligned(8) to aligned_s64
+To: stable@vger.kernel.org
+Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>, Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Sasha Levin <sashal@kernel.org>
+Message-ID: <20250824133904.2896884-1-sashal@kernel.org>
+
+From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+
+[ Upstream commit 27e6ddf291b1c05bfcc3534e8212ed6c46447c60 ]
+
+The vast majority of IIO drivers use aligned_s64 for the type of the
+timestamp field.  It is not a bug to use int64_t and until this series
+iio_push_to_buffers_with_timestamp() took and int64_t timestamp, it
+is inconsistent.  This change is to remove that inconsistency and
+ensure there is one obvious choice for future drivers.
+
+Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://patch.msgid.link/20241215182912.481706-19-jic23@kernel.org
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c |    2 +-
+ drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c  |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+@@ -178,7 +178,7 @@ static const struct iio_chan_spec inv_ic
+ struct inv_icm42600_accel_buffer {
+       struct inv_icm42600_fifo_sensor_data accel;
+       int16_t temp;
+-      int64_t timestamp __aligned(8);
++      aligned_s64 timestamp;
+ };
+ #define INV_ICM42600_SCAN_MASK_ACCEL_3AXIS                            \
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+@@ -78,7 +78,7 @@ static const struct iio_chan_spec inv_ic
+ struct inv_icm42600_gyro_buffer {
+       struct inv_icm42600_fifo_sensor_data gyro;
+       int16_t temp;
+-      int64_t timestamp __aligned(8);
++      aligned_s64 timestamp;
+ };
+ #define INV_ICM42600_SCAN_MASK_GYRO_3AXIS                             \
diff --git a/queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch b/queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch
new file mode 100644 (file)
index 0000000..8620921
--- /dev/null
@@ -0,0 +1,70 @@
+From stable+bounces-172732-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:12 2025
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Aug 2025 09:39:01 -0400
+Subject: iio: imu: inv_icm42600: use = { } instead of memset()
+To: stable@vger.kernel.org
+Cc: "David Lechner" <dlechner@baylibre.com>, "Nuno Sá" <nuno.sa@analog.com>, "Andy Shevchenko" <andriy.shevchenko@linux.intel.com>, "Jonathan Cameron" <Jonathan.Cameron@huawei.com>, "Sasha Levin" <sashal@kernel.org>
+Message-ID: <20250824133904.2896884-2-sashal@kernel.org>
+
+From: David Lechner <dlechner@baylibre.com>
+
+[ Upstream commit 352112e2d9aab6a156c2803ae14eb89a9fd93b7d ]
+
+Use { } instead of memset() to zero-initialize stack memory to simplify
+the code.
+
+Signed-off-by: David Lechner <dlechner@baylibre.com>
+Reviewed-by: Nuno Sá <nuno.sa@analog.com>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Link: https://patch.msgid.link/20250611-iio-zero-init-stack-with-instead-of-memset-v1-16-ebb2d0a24302@baylibre.com
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c |    5 ++---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c  |    5 ++---
+ 2 files changed, 4 insertions(+), 6 deletions(-)
+
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+@@ -905,7 +905,8 @@ int inv_icm42600_accel_parse_fifo(struct
+       const int8_t *temp;
+       unsigned int odr;
+       int64_t ts_val;
+-      struct inv_icm42600_accel_buffer buffer;
++      /* buffer is copied to userspace, zeroing it to avoid any data leak */
++      struct inv_icm42600_accel_buffer buffer = { };
+       /* parse all fifo packets */
+       for (i = 0, no = 0; i < st->fifo.count; i += size, ++no) {
+@@ -924,8 +925,6 @@ int inv_icm42600_accel_parse_fifo(struct
+                       inv_sensors_timestamp_apply_odr(ts, st->fifo.period,
+                                                       st->fifo.nb.total, no);
+-              /* buffer is copied to userspace, zeroing it to avoid any data leak */
+-              memset(&buffer, 0, sizeof(buffer));
+               memcpy(&buffer.accel, accel, sizeof(buffer.accel));
+               /* convert 8 bits FIFO temperature in high resolution format */
+               buffer.temp = temp ? (*temp * 64) : 0;
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+@@ -809,7 +809,8 @@ int inv_icm42600_gyro_parse_fifo(struct
+       const int8_t *temp;
+       unsigned int odr;
+       int64_t ts_val;
+-      struct inv_icm42600_gyro_buffer buffer;
++      /* buffer is copied to userspace, zeroing it to avoid any data leak */
++      struct inv_icm42600_gyro_buffer buffer = { };
+       /* parse all fifo packets */
+       for (i = 0, no = 0; i < st->fifo.count; i += size, ++no) {
+@@ -828,8 +829,6 @@ int inv_icm42600_gyro_parse_fifo(struct
+                       inv_sensors_timestamp_apply_odr(ts, st->fifo.period,
+                                                       st->fifo.nb.total, no);
+-              /* buffer is copied to userspace, zeroing it to avoid any data leak */
+-              memset(&buffer, 0, sizeof(buffer));
+               memcpy(&buffer.gyro, gyro, sizeof(buffer.gyro));
+               /* convert 8 bits FIFO temperature in high resolution format */
+               buffer.temp = temp ? (*temp * 64) : 0;
index beee554a64e24b950984ab786ddda3e23b28df69..364cb6b81a1c9e2c6c86dc3b0aaf300d06c75ed7 100644 (file)
@@ -244,3 +244,7 @@ drm-i915-icl-tc-cache-the-max-lane-count-value.patch
 ovl-use-i_mutex_parent-when-locking-parent-in-ovl_create_temp.patch
 powerpc-boot-fix-build-with-gcc-15.patch
 tls-fix-handling-of-zero-length-records-on-the-rx_list.patch
+iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch
+iio-imu-inv_icm42600-use-instead-of-memset.patch
+iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch
+iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch