18
18
#include <zephyr/logging/log.h>
19
19
20
20
#include "lis2dux12.h"
21
+ #include "lis2dux12_decoder.h"
22
+ #include "lis2dux12_rtio.h"
21
23
22
24
#if DT_HAS_COMPAT_STATUS_OKAY (st_lis2dux12 )
23
25
#include "lis2dux12_api.h"
@@ -230,6 +232,10 @@ static DEVICE_API(sensor, lis2dux12_driver_api) = {
230
232
#endif
231
233
.sample_fetch = lis2dux12_sample_fetch ,
232
234
.channel_get = lis2dux12_channel_get ,
235
+ #ifdef CONFIG_SENSOR_ASYNC_API
236
+ .get_decoder = lis2dux12_get_decoder ,
237
+ .submit = lis2dux12_submit ,
238
+ #endif
233
239
};
234
240
235
241
/*
@@ -256,16 +262,25 @@ static DEVICE_API(sensor, lis2dux12_driver_api) = {
256
262
.range = DT_INST_PROP(inst, range), \
257
263
.pm = DT_INST_PROP(inst, power_mode), \
258
264
.odr = DT_INST_PROP(inst, odr), \
265
+ IF_ENABLED(CONFIG_LIS2DUX12_STREAM, \
266
+ (.fifo_wtm = DT_INST_PROP(inst, fifo_watermark), \
267
+ .accel_batch = DT_INST_PROP(inst, accel_fifo_batch_rate), \
268
+ .ts_batch = DT_INST_PROP(inst, timestamp_fifo_batch_rate),)) \
259
269
IF_ENABLED(UTIL_OR(DT_INST_NODE_HAS_PROP(inst, int1_gpios), \
260
270
DT_INST_NODE_HAS_PROP(inst, int2_gpios)), \
261
271
(LIS2DUX12_CFG_IRQ(inst))) \
262
272
263
- #define LIS2DUX12_SPI_OPERATION \
264
- (SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_MODE_CPOL | SPI_MODE_CPHA)
265
-
266
273
/*
267
274
* Instantiation macros used when a device is on a SPI bus.
268
275
*/
276
+ #define LIS2DUX12_SPI_OPERATION \
277
+ (SPI_WORD_SET(8) | SPI_OP_MODE_MASTER | SPI_MODE_CPOL | SPI_MODE_CPHA)
278
+
279
+ #define LIS2DUX12_SPI_RTIO_DEFINE (inst , name ) \
280
+ SPI_DT_IODEV_DEFINE(lis2dux12_iodev_##name##_##inst, \
281
+ DT_DRV_INST(inst), LIS2DUX12_SPI_OPERATION, 0U); \
282
+ RTIO_DEFINE(lis2dux12_rtio_ctx_##name##_##inst, 4, 4);
283
+
269
284
#define LIS2DUX12_CONFIG_SPI (inst , name ) \
270
285
{ \
271
286
STMEMSC_CTX_SPI(&lis2dux12_config_##name##_##inst.stmemsc_cfg), \
@@ -275,9 +290,27 @@ static DEVICE_API(sensor, lis2dux12_driver_api) = {
275
290
LIS2DUX12_CONFIG_COMMON(inst, name) \
276
291
}
277
292
293
+ #define LIS2DUX12_DEFINE_SPI (inst , name ) \
294
+ IF_ENABLED(UTIL_AND(CONFIG_LIS2DUX12_STREAM, \
295
+ CONFIG_SPI_RTIO), \
296
+ (LIS2DUX12_SPI_RTIO_DEFINE(inst, name))); \
297
+ static struct lis2dux12_data lis2dux12_data_##name##_##inst = { \
298
+ IF_ENABLED(UTIL_AND(CONFIG_LIS2DUX12_STREAM, \
299
+ CONFIG_SPI_RTIO), \
300
+ (.rtio_ctx = &lis2dux12_rtio_ctx_##name##_##inst, \
301
+ .iodev = &lis2dux12_iodev_##name##_##inst, \
302
+ .bus_type = BUS_SPI,)) \
303
+ }; \
304
+ static const struct lis2dux12_config lis2dux12_config_##name##_##inst = \
305
+ LIS2DUX12_CONFIG_SPI(inst, name);
306
+
278
307
/*
279
308
* Instantiation macros used when a device is on an I2C bus.
280
309
*/
310
+ #define LIS2DUX12_I2C_RTIO_DEFINE (inst , name ) \
311
+ I2C_DT_IODEV_DEFINE(lis2dux12_iodev_##name##_##inst, DT_DRV_INST(inst)); \
312
+ RTIO_DEFINE(lis2dux12_rtio_ctx_##name##_##inst, 4, 4);
313
+
281
314
#define LIS2DUX12_CONFIG_I2C (inst , name ) \
282
315
{ \
283
316
STMEMSC_CTX_I2C(&lis2dux12_config_##name##_##inst.stmemsc_cfg), \
@@ -287,17 +320,29 @@ static DEVICE_API(sensor, lis2dux12_driver_api) = {
287
320
LIS2DUX12_CONFIG_COMMON(inst, name) \
288
321
}
289
322
323
+ #define LIS2DUX12_DEFINE_I2C (inst , name ) \
324
+ IF_ENABLED(UTIL_AND(CONFIG_LIS2DUX12_STREAM, \
325
+ CONFIG_I2C_RTIO), \
326
+ (LIS2DUX12_I2C_RTIO_DEFINE(inst, name))); \
327
+ static struct lis2dux12_data lis2dux12_data_##name##_##inst = { \
328
+ IF_ENABLED(UTIL_AND(CONFIG_LIS2DUX12_STREAM, \
329
+ CONFIG_I2C_RTIO), \
330
+ (.rtio_ctx = &lis2dux12_rtio_ctx_##name##_##inst, \
331
+ .iodev = &lis2dux12_iodev_##name##_##inst, \
332
+ .bus_type = BUS_I2C,)) \
333
+ }; \
334
+ static const struct lis2dux12_config lis2dux12_config_##name##_##inst = \
335
+ LIS2DUX12_CONFIG_I2C(inst, name);
336
+
290
337
/*
291
338
* Main instantiation macro. Use of COND_CODE_1() selects the right
292
339
* bus-specific macro at preprocessor time.
293
340
*/
294
341
295
342
#define LIS2DUX12_DEFINE (inst , name ) \
296
- static struct lis2dux12_data lis2dux12_data_##name##_##inst; \
297
- static const struct lis2dux12_config lis2dux12_config_##name##_##inst = \
298
343
COND_CODE_1(DT_INST_ON_BUS(inst, spi), \
299
- (LIS2DUX12_CONFIG_SPI (inst, name)), \
300
- (LIS2DUX12_CONFIG_I2C (inst, name))); \
344
+ (LIS2DUX12_DEFINE_SPI (inst, name)), \
345
+ (LIS2DUX12_DEFINE_I2C (inst, name))); \
301
346
\
302
347
SENSOR_DEVICE_DT_INST_DEFINE(inst, name##_init, NULL, \
303
348
&lis2dux12_data_##name##_##inst, \
0 commit comments