Linux IIO development
 help / color / mirror / Atom feed
* [PATCH v3 0/2] iio: accel: kionix-kx022a: unify staging buffer and convert to iio_push_to_buffers_with_ts()
@ 2026-08-19 10:37 Gabriel Rondon
  2026-08-19 10:37 ` [PATCH v3 1/2] iio: accel: kionix-kx022a: use scan struct for one-shot and trigger reads Gabriel Rondon
  2026-08-19 10:37 ` [PATCH v3 2/2] iio: accel: kionix-kx022a: use iio_push_to_buffers_with_ts() Gabriel Rondon
  0 siblings, 2 replies; 3+ messages in thread
From: Gabriel Rondon @ 2026-08-19 10:37 UTC (permalink / raw)
  To: Matti Vaittinen, Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
	linux-kernel

This is the kx022a staging-buffer unification plus the deprecated-API
conversion. Patch 1 drops the redundant buffer and routes the one-shot
read and the triggered handler through scan; patch 2 does the
iio_push_to_buffers_with_ts() conversion.

Changes in v3:
- get_axis(): use a local __le16 *buf and le16_to_cpup() (Andy)
- Add Suggested-by: Jonathan Cameron to patch 1
- Trim patch 2 changelog

v2: https://lore.kernel.org/linux-iio/20260818215122.52715-1-grondon@gmail.com/

Gabriel Rondon (2):
  iio: accel: kionix-kx022a: use scan struct for one-shot and trigger
    reads
  iio: accel: kionix-kx022a: use iio_push_to_buffers_with_ts()

 drivers/iio/accel/kionix-kx022a.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

-- 
2.50.1 (Apple Git-155)


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v3 1/2] iio: accel: kionix-kx022a: use scan struct for one-shot and trigger reads
  2026-08-19 10:37 [PATCH v3 0/2] iio: accel: kionix-kx022a: unify staging buffer and convert to iio_push_to_buffers_with_ts() Gabriel Rondon
@ 2026-08-19 10:37 ` Gabriel Rondon
  2026-08-19 10:37 ` [PATCH v3 2/2] iio: accel: kionix-kx022a: use iio_push_to_buffers_with_ts() Gabriel Rondon
  1 sibling, 0 replies; 3+ messages in thread
From: Gabriel Rondon @ 2026-08-19 10:37 UTC (permalink / raw)
  To: Matti Vaittinen, Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
	linux-kernel

The driver kept two separate staging areas that hold the same thing:
buffer[8], a DMA-aligned area used by the one-shot read in
kx022a_get_axis() and by the triggered handler, and the scan struct,
used by the FIFO flush path. Both are three __le16 channels plus room
for the timestamp.

Drop buffer and route the one-shot read and the triggered handler
through scan.channels, so the driver has a single staging area. Move the
IIO_DMA_MINALIGN alignment onto scan, since it now backs the regmap bulk
reads that buffer used to.

No functional change. get_axis() only runs via read_raw() under
iio_device_claim_direct(), so it cannot run while the triggered buffer is
active, and the triggered handler only runs while it is; the two never
touch scan concurrently, exactly as they previously shared buffer.

Suggested-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Gabriel Rondon <grondon@gmail.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
---
 drivers/iio/accel/kionix-kx022a.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
index 02dd1db7a646..93104fdc74b5 100644
--- a/drivers/iio/accel/kionix-kx022a.c
+++ b/drivers/iio/accel/kionix-kx022a.c
@@ -301,11 +301,10 @@ struct kx022a_data {
 	__le16 *fifo_buffer;
 
 	/* 3 x 16bit accel data + timestamp */
-	__le16 buffer[8] __aligned(IIO_DMA_MINALIGN);
 	struct {
 		__le16 channels[3];
 		aligned_s64 ts;
-	} scan;
+	} scan __aligned(IIO_DMA_MINALIGN);
 };
 
 static const struct iio_mount_matrix *
@@ -611,14 +610,14 @@ static int kx022a_get_axis(struct kx022a_data *data,
 			   struct iio_chan_spec const *chan,
 			   int *val)
 {
+	__le16 *buf = &data->scan.channels[0];
 	int ret;
 
-	ret = regmap_bulk_read(data->regmap, chan->address, &data->buffer[0],
-			       sizeof(__le16));
+	ret = regmap_bulk_read(data->regmap, chan->address, buf, sizeof(*buf));
 	if (ret)
 		return ret;
 
-	*val = (s16)le16_to_cpu(data->buffer[0]);
+	*val = (s16)le16_to_cpup(buf);
 
 	return IIO_VAL_INT;
 }
@@ -1029,12 +1028,12 @@ static irqreturn_t kx022a_trigger_handler(int irq, void *p)
 	struct kx022a_data *data = iio_priv(idev);
 	int ret;
 
-	ret = regmap_bulk_read(data->regmap, data->chip_info->xout_l, data->buffer,
-			       KX022A_FIFO_SAMPLES_SIZE_BYTES);
+	ret = regmap_bulk_read(data->regmap, data->chip_info->xout_l,
+			       data->scan.channels, KX022A_FIFO_SAMPLES_SIZE_BYTES);
 	if (ret < 0)
 		goto err_read;
 
-	iio_push_to_buffers_with_timestamp(idev, data->buffer, data->timestamp);
+	iio_push_to_buffers_with_timestamp(idev, &data->scan, data->timestamp);
 err_read:
 	iio_trigger_notify_done(idev->trig);
 
-- 
2.50.1 (Apple Git-155)


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v3 2/2] iio: accel: kionix-kx022a: use iio_push_to_buffers_with_ts()
  2026-08-19 10:37 [PATCH v3 0/2] iio: accel: kionix-kx022a: unify staging buffer and convert to iio_push_to_buffers_with_ts() Gabriel Rondon
  2026-08-19 10:37 ` [PATCH v3 1/2] iio: accel: kionix-kx022a: use scan struct for one-shot and trigger reads Gabriel Rondon
@ 2026-08-19 10:37 ` Gabriel Rondon
  1 sibling, 0 replies; 3+ messages in thread
From: Gabriel Rondon @ 2026-08-19 10:37 UTC (permalink / raw)
  To: Matti Vaittinen, Jonathan Cameron
  Cc: David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
	linux-kernel

Replace the deprecated iio_push_to_buffers_with_timestamp() with
iio_push_to_buffers_with_ts(), which takes and checks the buffer size.
Both sites push data->scan, so pass its size.

Signed-off-by: Gabriel Rondon <grondon@gmail.com>
Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
---
 drivers/iio/accel/kionix-kx022a.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
index 93104fdc74b5..06ae7e540ee6 100644
--- a/drivers/iio/accel/kionix-kx022a.c
+++ b/drivers/iio/accel/kionix-kx022a.c
@@ -863,7 +863,8 @@ static int __kx022a_fifo_flush(struct iio_dev *idev, unsigned int samples,
 		for_each_set_bit(bit, idev->active_scan_mask, AXIS_MAX)
 			chs[bit] = sam[bit];
 
-		iio_push_to_buffers_with_timestamp(idev, &data->scan, tstamp);
+		iio_push_to_buffers_with_ts(idev, &data->scan,
+					    sizeof(data->scan), tstamp);
 
 		tstamp += sample_period;
 	}
@@ -1033,7 +1034,8 @@ static irqreturn_t kx022a_trigger_handler(int irq, void *p)
 	if (ret < 0)
 		goto err_read;
 
-	iio_push_to_buffers_with_timestamp(idev, &data->scan, data->timestamp);
+	iio_push_to_buffers_with_ts(idev, &data->scan, sizeof(data->scan),
+				    data->timestamp);
 err_read:
 	iio_trigger_notify_done(idev->trig);
 
-- 
2.50.1 (Apple Git-155)


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-19 10:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19 10:37 [PATCH v3 0/2] iio: accel: kionix-kx022a: unify staging buffer and convert to iio_push_to_buffers_with_ts() Gabriel Rondon
2026-08-19 10:37 ` [PATCH v3 1/2] iio: accel: kionix-kx022a: use scan struct for one-shot and trigger reads Gabriel Rondon
2026-08-19 10:37 ` [PATCH v3 2/2] iio: accel: kionix-kx022a: use iio_push_to_buffers_with_ts() Gabriel Rondon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox