* [PATCH v4 1/2] iio: imu: inv_icm42600: reorder all driver headers
2026-06-25 12:24 [PATCH v4 0/2] iio: imu: inv_icm42600: add hwfifo watermark attributes Jean-Baptiste Maneyrol via B4 Relay
@ 2026-06-25 12:24 ` Jean-Baptiste Maneyrol via B4 Relay
2026-06-25 14:26 ` Andy Shevchenko
2026-06-25 12:24 ` [PATCH v4 2/2] iio: imu: inv_icm42600: add buffer hwfifo watermark attributes Jean-Baptiste Maneyrol via B4 Relay
1 sibling, 1 reply; 6+ messages in thread
From: Jean-Baptiste Maneyrol via B4 Relay @ 2026-06-25 12:24 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Jean-Baptiste Maneyrol
From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Reorder headers includes following linux rules.
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
---
drivers/iio/imu/inv_icm42600/inv_icm42600.h | 8 +++++---
drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 13 +++++++------
drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c | 7 ++++---
drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h | 2 +-
drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 12 ++++++------
drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 11 ++++++-----
drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 8 ++++----
drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 8 ++++----
drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c | 3 ++-
9 files changed, 39 insertions(+), 33 deletions(-)
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600.h b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
index c8b48a5c5ed0..2ab863c9d53a 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
@@ -6,13 +6,15 @@
#ifndef INV_ICM42600_H_
#define INV_ICM42600_H_
-#include <linux/bits.h>
#include <linux/bitfield.h>
-#include <linux/regmap.h>
+#include <linux/bits.h>
#include <linux/mutex.h>
-#include <linux/regulator/consumer.h>
#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+
#include <linux/iio/iio.h>
+
#include <linux/iio/common/inv_sensors_timestamp.h>
#include "inv_icm42600_buffer.h"
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
index 532d5fdffaf8..87471e8c9bc7 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
@@ -3,25 +3,26 @@
* Copyright (C) 2020 Invensense, Inc.
*/
-#include <linux/kernel.h>
+#include <linux/delay.h>
#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/math64.h>
+#include <linux/minmax.h>
#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
-#include <linux/delay.h>
-#include <linux/math64.h>
-#include <linux/minmax.h>
#include <linux/units.h>
#include <linux/iio/buffer.h>
-#include <linux/iio/common/inv_sensors_timestamp.h>
#include <linux/iio/events.h>
#include <linux/iio/iio.h>
#include <linux/iio/kfifo_buf.h>
+#include <linux/iio/common/inv_sensors_timestamp.h>
+
#include "inv_icm42600.h"
-#include "inv_icm42600_temp.h"
#include "inv_icm42600_buffer.h"
+#include "inv_icm42600_temp.h"
#define INV_ICM42600_ACCEL_CHAN(_modifier, _index, _ext_info) \
{ \
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
index 68a395758031..26817158ec78 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
@@ -3,18 +3,19 @@
* Copyright (C) 2020 Invensense, Inc.
*/
-#include <linux/kernel.h>
+#include <linux/delay.h>
#include <linux/device.h>
+#include <linux/kernel.h>
#include <linux/minmax.h>
#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
-#include <linux/delay.h>
#include <linux/iio/buffer.h>
-#include <linux/iio/common/inv_sensors_timestamp.h>
#include <linux/iio/iio.h>
+#include <linux/iio/common/inv_sensors_timestamp.h>
+
#include "inv_icm42600.h"
#include "inv_icm42600_buffer.h"
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
index ffca4da1e249..6ab1eb1a0051 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
@@ -6,8 +6,8 @@
#ifndef INV_ICM42600_BUFFER_H_
#define INV_ICM42600_BUFFER_H_
-#include <linux/kernel.h>
#include <linux/bits.h>
+#include <linux/kernel.h>
struct inv_icm42600_state;
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
index 76eb22488e5f..dc97d8a274e3 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c
@@ -3,18 +3,18 @@
* Copyright (C) 2020 Invensense, Inc.
*/
-#include <linux/kernel.h>
-#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/slab.h>
#include <linux/delay.h>
-#include <linux/mutex.h>
+#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
-#include <linux/regulator/consumer.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/property.h>
#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/slab.h>
#include <linux/iio/iio.h>
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
index 11339ddf1da3..ea8aa64a3f33 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
@@ -3,22 +3,23 @@
* Copyright (C) 2020 Invensense, Inc.
*/
-#include <linux/kernel.h>
+#include <linux/delay.h>
#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/math64.h>
#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
-#include <linux/delay.h>
-#include <linux/math64.h>
#include <linux/iio/buffer.h>
-#include <linux/iio/common/inv_sensors_timestamp.h>
#include <linux/iio/iio.h>
#include <linux/iio/kfifo_buf.h>
+#include <linux/iio/common/inv_sensors_timestamp.h>
+
#include "inv_icm42600.h"
-#include "inv_icm42600_temp.h"
#include "inv_icm42600_buffer.h"
+#include "inv_icm42600_temp.h"
#define INV_ICM42600_GYRO_CHAN(_modifier, _index, _ext_info) \
{ \
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
index 99d37ac53bbe..f422523207ee 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c
@@ -3,13 +3,13 @@
* Copyright (C) 2020 InvenSense, Inc.
*/
-#include <linux/kernel.h>
#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/mod_devicetable.h>
#include <linux/i2c.h>
-#include <linux/regmap.h>
+#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
#include <linux/property.h>
+#include <linux/regmap.h>
#include "inv_icm42600.h"
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
index 13e2e7d38638..ec8dac9f24aa 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c
@@ -3,13 +3,13 @@
* Copyright (C) 2020 InvenSense, Inc.
*/
-#include <linux/kernel.h>
#include <linux/device.h>
-#include <linux/module.h>
+#include <linux/kernel.h>
#include <linux/mod_devicetable.h>
-#include <linux/spi/spi.h>
-#include <linux/regmap.h>
+#include <linux/module.h>
#include <linux/property.h>
+#include <linux/regmap.h>
+#include <linux/spi/spi.h>
#include "inv_icm42600.h"
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
index 727b03d541a5..7f80bda471c3 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c
@@ -3,11 +3,12 @@
* Copyright (C) 2020 Invensense, Inc.
*/
-#include <linux/kernel.h>
#include <linux/device.h>
+#include <linux/kernel.h>
#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
+
#include <linux/iio/iio.h>
#include "inv_icm42600.h"
--
2.54.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v4 2/2] iio: imu: inv_icm42600: add buffer hwfifo watermark attributes
2026-06-25 12:24 [PATCH v4 0/2] iio: imu: inv_icm42600: add hwfifo watermark attributes Jean-Baptiste Maneyrol via B4 Relay
2026-06-25 12:24 ` [PATCH v4 1/2] iio: imu: inv_icm42600: reorder all driver headers Jean-Baptiste Maneyrol via B4 Relay
@ 2026-06-25 12:24 ` Jean-Baptiste Maneyrol via B4 Relay
2026-07-01 20:48 ` Jonathan Cameron
1 sibling, 1 reply; 6+ messages in thread
From: Jean-Baptiste Maneyrol via B4 Relay @ 2026-06-25 12:24 UTC (permalink / raw)
To: Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
Cc: linux-iio, linux-kernel, Jean-Baptiste Maneyrol, Andy Shevchenko
From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Add hwfifo_watermark/min/max/enabled buffer attributes.
Hardware FIFO is always enabled and used.
Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
---
drivers/iio/imu/inv_icm42600/inv_icm42600.h | 2 ++
drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 5 +--
drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c | 36 ++++++++++++++++++++++
drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h | 1 +
drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 5 +--
5 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600.h b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
index 2ab863c9d53a..b55d993f0264 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h
@@ -356,6 +356,8 @@ struct inv_icm42600_sensor_state {
cpu_to_le16((_wm) & GENMASK(11, 0))
/* FIFO is 2048 bytes, let 12 samples for reading latency */
#define INV_ICM42600_FIFO_WATERMARK_MAX (2048 - 12 * 16)
+/* INV_ICM42600_FIFO_WATERMARK_MAX / 8 = 232 */
+#define INV_ICM42600_FIFO_WATERMARK_MAX_SAMPLES 232
#define INV_ICM42600_REG_INT_CONFIG1 0x0064
#define INV_ICM42600_INT_CONFIG1_TPULSE_DURATION BIT(6)
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
index 87471e8c9bc7..2421de63f5bf 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
@@ -1187,8 +1187,9 @@ struct iio_dev *inv_icm42600_accel_init(struct inv_icm42600_state *st)
indio_dev->num_channels = ARRAY_SIZE(inv_icm42600_accel_channels);
indio_dev->available_scan_masks = inv_icm42600_accel_scan_masks;
- ret = devm_iio_kfifo_buffer_setup(dev, indio_dev,
- &inv_icm42600_buffer_ops);
+ ret = devm_iio_kfifo_buffer_setup_ext(dev, indio_dev,
+ &inv_icm42600_buffer_ops,
+ inv_icm42600_buffer_attrs);
if (ret)
return ERR_PTR(ret);
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
index 26817158ec78..c3c2fbd8d9ce 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c
@@ -10,9 +10,11 @@
#include <linux/mutex.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
+#include <linux/stringify.h>
#include <linux/iio/buffer.h>
#include <linux/iio/iio.h>
+#include <linux/iio/sysfs.h>
#include <linux/iio/common/inv_sensors_timestamp.h>
@@ -438,6 +440,40 @@ const struct iio_buffer_setup_ops inv_icm42600_buffer_ops = {
.postdisable = inv_icm42600_buffer_postdisable,
};
+static ssize_t hwfifo_watermark_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct iio_dev *indio_dev = dev_to_iio_dev(dev);
+ struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev);
+ unsigned int wm;
+
+ guard(mutex)(&st->lock);
+
+ if (indio_dev == st->indio_accel)
+ wm = st->fifo.watermark.eff_accel;
+ else if (indio_dev == st->indio_gyro)
+ wm = st->fifo.watermark.eff_gyro;
+ else
+ return -EINVAL;
+
+ return sysfs_emit(buf, "%u\n", wm);
+}
+
+IIO_STATIC_CONST_DEVICE_ATTR(hwfifo_watermark_min, "1");
+IIO_STATIC_CONST_DEVICE_ATTR(hwfifo_watermark_max,
+ __stringify(INV_ICM42600_FIFO_WATERMARK_MAX_SAMPLES));
+static IIO_DEVICE_ATTR_RO(hwfifo_watermark, 0);
+IIO_STATIC_CONST_DEVICE_ATTR(hwfifo_enabled, "1");
+
+const struct iio_dev_attr *inv_icm42600_buffer_attrs[] = {
+ &iio_dev_attr_hwfifo_watermark_min,
+ &iio_dev_attr_hwfifo_watermark_max,
+ &iio_dev_attr_hwfifo_watermark,
+ &iio_dev_attr_hwfifo_enabled,
+ NULL
+};
+
int inv_icm42600_buffer_fifo_read(struct inv_icm42600_state *st,
unsigned int max)
{
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
index 6ab1eb1a0051..3b81dba4b7c4 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h
@@ -79,6 +79,7 @@ ssize_t inv_icm42600_fifo_decode_packet(const void *packet, const void **accel,
const void **timestamp, unsigned int *odr);
extern const struct iio_buffer_setup_ops inv_icm42600_buffer_ops;
+extern const struct iio_dev_attr *inv_icm42600_buffer_attrs[];
int inv_icm42600_buffer_init(struct inv_icm42600_state *st);
diff --git a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
index ea8aa64a3f33..881612a8e92d 100644
--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
@@ -773,8 +773,9 @@ struct iio_dev *inv_icm42600_gyro_init(struct inv_icm42600_state *st)
indio_dev->available_scan_masks = inv_icm42600_gyro_scan_masks;
indio_dev->setup_ops = &inv_icm42600_buffer_ops;
- ret = devm_iio_kfifo_buffer_setup(dev, indio_dev,
- &inv_icm42600_buffer_ops);
+ ret = devm_iio_kfifo_buffer_setup_ext(dev, indio_dev,
+ &inv_icm42600_buffer_ops,
+ inv_icm42600_buffer_attrs);
if (ret)
return ERR_PTR(ret);
--
2.54.0
^ permalink raw reply related [flat|nested] 6+ messages in thread