mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-11 17:43:51 -04:00
iio: proximity: irsd200: Use a struct for scan and iio_push_to_buffers_with_ts()
The driver previously used an array of two s64, then type cast the pointer to write an s16 to the start. The code is made more readable using a structure. At the same time switch to the new iio_push_to_buffers_with_ts() helper to enable runtime checking of the size of the source buffer. Note that this approach uses a structure with holes, so use memset() to ensure those do not contain old kernel data as this data is passed to userspace. Reviewed-by: David Lechner <dlechner@baylibre.com> Link: https://patch.msgid.link/20250413103443.2420727-17-jic23@kernel.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
@@ -760,15 +760,19 @@ static irqreturn_t irsd200_trigger_handler(int irq, void *pollf)
|
||||
{
|
||||
struct iio_dev *indio_dev = ((struct iio_poll_func *)pollf)->indio_dev;
|
||||
struct irsd200_data *data = iio_priv(indio_dev);
|
||||
s64 buf[2] = {};
|
||||
struct {
|
||||
s16 channel;
|
||||
aligned_s64 ts;
|
||||
} scan;
|
||||
int ret;
|
||||
|
||||
ret = irsd200_read_data(data, (s16 *)buf);
|
||||
memset(&scan, 0, sizeof(scan));
|
||||
ret = irsd200_read_data(data, &scan.channel);
|
||||
if (ret)
|
||||
goto end;
|
||||
|
||||
iio_push_to_buffers_with_timestamp(indio_dev, buf,
|
||||
iio_get_time_ns(indio_dev));
|
||||
iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan),
|
||||
iio_get_time_ns(indio_dev));
|
||||
|
||||
end:
|
||||
iio_trigger_notify_done(indio_dev->trig);
|
||||
|
||||
Reference in New Issue
Block a user