patch "iio: proximity: isl29501: fix buffered read on big-endian systems" added to char-misc-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: proximity: isl29501: fix buffered read on big-endian systems
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From de18e978d0cda23e4c102e18092b63a5b0b3a800 Mon Sep 17 00:00:00 2001
From: David Lechner <[email protected]>
Date: Tue, 22 Jul 2025 15:54:21 -0500
Subject: iio: proximity: isl29501: fix buffered read on big-endian systems
Fix passing a u32 value as a u16 buffer scan item. This works on little- endian systems, but not on big-endian systems.
A new local variable is introduced for getting the register value and the array is changed to a struct to make the data layout more explicit rather than just changing the type and having to recalculate the proper length needed for the timestamp.
--- drivers/iio/proximity/isl29501.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
drivers/iio/proximity/isl29501.c +10 -4
@@ -938,12 +938,18 @@ static irqreturn_t isl29501_trigger_handler(int irq, void *p)struct iio_dev *indio_dev = pf->indio_dev;struct isl29501_private *isl29501 =iio_priv (indio_dev);const unsigned long *active_mask = indio_dev->active_scan_mask; -u32 buffer[4 ]__aligned(8) = {};/* 1x16-bit + naturally aligned ts */ +u32 value; +struct { +u16 data; +aligned_s64 ts; + } scan = { }; -if (test_bit (ISL29501_DISTANCE_SCAN_INDEX , active_mask)) -isl29501_register_read (isl29501,REG_DISTANCE , buffer); +if (test_bit (ISL29501_DISTANCE_SCAN_INDEX , active_mask)) { +isl29501_register_read (isl29501,REG_DISTANCE , &value); + scan.data = value; + } -iio_push_to_buffers_with_timestamp (indio_dev, buffer, pf->timestamp); +iio_push_to_buffers_with_timestamp (indio_dev, &scan, pf->timestamp);iio_trigger_notify_done (indio_dev->trig);return IRQ_HANDLED ;
Signature · 1 line
2.50.1