diff --git a/drivers/sensor/tdk/icm42688/Kconfig b/drivers/sensor/tdk/icm42688/Kconfig index aea3cc6480f..413b199c1ea 100644 --- a/drivers/sensor/tdk/icm42688/Kconfig +++ b/drivers/sensor/tdk/icm42688/Kconfig @@ -1,6 +1,7 @@ # ICM42688-P Six-Axis Motion Tracking device configuration options # # Copyright (c) 2022 Intel Corporation +# Copyright (c) 2024 Croxel Inc. # # SPDX-License-Identifier: Apache-2.0 @@ -9,6 +10,7 @@ menuconfig ICM42688 default y depends on DT_HAS_INVENSENSE_ICM42688_ENABLED select SPI + select RTIO_WORKQ if SENSOR_ASYNC_API help Enable driver for ICM42688 SPI-based six-axis motion tracking device. diff --git a/drivers/sensor/tdk/icm42688/icm42688_rtio.c b/drivers/sensor/tdk/icm42688/icm42688_rtio.c index b9e86c3d9a1..50ca1160da0 100644 --- a/drivers/sensor/tdk/icm42688/icm42688_rtio.c +++ b/drivers/sensor/tdk/icm42688/icm42688_rtio.c @@ -1,10 +1,12 @@ /* * Copyright (c) 2023 Google LLC + * Copyright (c) 2024 Croxel Inc. * * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include "icm42688.h" #include "icm42688_decoder.h" #include "icm42688_reg.h" @@ -77,9 +79,10 @@ static void icm42688_submit_one_shot(const struct device *dev, struct rtio_iodev rtio_iodev_sqe_ok(iodev_sqe, 0); } -void icm42688_submit(const struct device *dev, struct rtio_iodev_sqe *iodev_sqe) +void icm42688_submit_sync(struct rtio_iodev_sqe *iodev_sqe) { const struct sensor_read_config *cfg = iodev_sqe->sqe.iodev->data; + const struct device *dev = cfg->sensor; if (!cfg->is_streaming) { icm42688_submit_one_shot(dev, iodev_sqe); @@ -90,4 +93,13 @@ void icm42688_submit(const struct device *dev, struct rtio_iodev_sqe *iodev_sqe) } } +void icm42688_submit(const struct device *dev, struct rtio_iodev_sqe *iodev_sqe) +{ + struct rtio_work_req *req = rtio_work_req_alloc(); + + __ASSERT_NO_MSG(req); + + rtio_work_req_submit(req, iodev_sqe, icm42688_submit_sync); +} + BUILD_ASSERT(sizeof(struct icm42688_decoder_header) == 9);