16
16
#include <zephyr/logging/log.h>
17
17
LOG_MODULE_DECLARE (LSM6DSV16X_RTIO );
18
18
19
- /*
20
- * Create a chain of SQEs representing a bus transaction to read a reg.
21
- * The RTIO-enabled bus driver will:
22
- *
23
- * - write "reg" address
24
- * - read "len" data bytes into "buf".
25
- * - call complete_op callback
26
- *
27
- * If drdy_xl is active it reads XL data (6 bytes) from LSM6DSV16X_OUTX_L_A reg.
28
- */
29
- static void lsm6dsv16x_rtio_rw_transaction (const struct device * dev , uint8_t reg ,
30
- uint8_t * buf , uint32_t len ,
31
- rtio_callback_t complete_op_cb )
32
- {
33
- struct lsm6dsv16x_data * lsm6dsv16x = dev -> data ;
34
- struct rtio * rtio = lsm6dsv16x -> rtio_ctx ;
35
- struct rtio_iodev * iodev = lsm6dsv16x -> iodev ;
36
- struct rtio_sqe * write_addr = rtio_sqe_acquire (rtio );
37
- struct rtio_sqe * read_reg = rtio_sqe_acquire (rtio );
38
- struct rtio_sqe * complete_op = rtio_sqe_acquire (rtio );
39
- struct rtio_iodev_sqe * sqe = lsm6dsv16x -> streaming_sqe ;
40
- uint8_t reg_bus = lsm6dsv16x_bus_reg (lsm6dsv16x , reg );
41
-
42
- /* check we have been able to acquire sqe */
43
- if (write_addr == NULL || read_reg == NULL || complete_op == NULL ) {
44
- return ;
45
- }
46
-
47
- rtio_sqe_prep_tiny_write (write_addr , iodev , RTIO_PRIO_NORM , & reg_bus , 1 , NULL );
48
- write_addr -> flags = RTIO_SQE_TRANSACTION ;
49
- rtio_sqe_prep_read (read_reg , iodev , RTIO_PRIO_NORM , buf , len , NULL );
50
- read_reg -> flags = RTIO_SQE_CHAINED ;
51
- if (lsm6dsv16x -> bus_type == BUS_I2C ) {
52
- read_reg -> iodev_flags |= RTIO_IODEV_I2C_STOP | RTIO_IODEV_I2C_RESTART ;
53
- } else if (lsm6dsv16x -> bus_type == BUS_I3C ) {
54
- read_reg -> iodev_flags |= RTIO_IODEV_I3C_STOP | RTIO_IODEV_I3C_RESTART ;
55
- }
56
-
57
- rtio_sqe_prep_callback_no_cqe (complete_op , complete_op_cb , (void * )dev , sqe );
58
- rtio_submit (rtio , 0 );
59
- }
60
-
61
19
static void lsm6dsv16x_config_drdy (const struct device * dev , struct trigger_config trig_cfg )
62
20
{
63
21
const struct lsm6dsv16x_config * config = dev -> config ;
@@ -500,6 +458,9 @@ static void lsm6dsv16x_read_fifo_cb(struct rtio *r, const struct rtio_sqe *sqe,
500
458
read_buf = buf + sizeof (hdr );
501
459
buf_avail = buf_len - sizeof (hdr );
502
460
461
+ uint8_t fifo_regs [] = { LSM6DSV16X_FIFO_DATA_OUT_TAG , };
462
+ struct rtio_reg_buf rbuf [] = { {read_buf , buf_avail }, };
463
+
503
464
/*
504
465
* Prepare rtio enabled bus to read all fifo_count entries from
505
466
* LSM6DSV16X_FIFO_DATA_OUT_TAG. Then lsm6dsv16x_complete_op_cb
@@ -515,8 +476,15 @@ static void lsm6dsv16x_read_fifo_cb(struct rtio *r, const struct rtio_sqe *sqe,
515
476
* lsm6dsv16x_fifo_out_raw_get(&dev_ctx, &f_data);
516
477
* }
517
478
*/
518
- lsm6dsv16x_rtio_rw_transaction (dev , LSM6DSV16X_FIFO_DATA_OUT_TAG ,
519
- read_buf , buf_avail , lsm6dsv16x_complete_op_cb );
479
+ rtio_read_transaction (lsm6dsv16x -> rtio_ctx ,
480
+ lsm6dsv16x -> iodev ,
481
+ fifo_regs ,
482
+ ARRAY_SIZE (fifo_regs ),
483
+ lsm6dsv16x -> bus_type ,
484
+ rbuf ,
485
+ lsm6dsv16x -> streaming_sqe ,
486
+ dev ,
487
+ lsm6dsv16x_complete_op_cb );
520
488
}
521
489
522
490
/*
@@ -643,6 +611,9 @@ static void lsm6dsv16x_read_status_cb(struct rtio *r, const struct rtio_sqe *sqe
643
611
memcpy (buf , & hdr , sizeof (hdr ));
644
612
read_buf = (uint8_t * )& ((struct lsm6dsv16x_rtio_data * )buf )-> acc [0 ];
645
613
614
+ uint8_t fifo_regs [] = { LSM6DSV16X_OUTX_L_A , };
615
+ struct rtio_reg_buf rbuf [] = { {read_buf , 6 }, };
616
+
646
617
/*
647
618
* Prepare rtio enabled bus to read LSM6DSV16X_OUTX_L_A register
648
619
* where accelerometer data is available.
@@ -654,8 +625,15 @@ static void lsm6dsv16x_read_status_cb(struct rtio *r, const struct rtio_sqe *sqe
654
625
*
655
626
* lsm6dsv16x_acceleration_raw_get(&dev_ctx, accel_raw);
656
627
*/
657
- lsm6dsv16x_rtio_rw_transaction (dev , LSM6DSV16X_OUTX_L_A ,
658
- read_buf , 6 , lsm6dsv16x_complete_op_cb );
628
+ rtio_read_transaction (lsm6dsv16x -> rtio_ctx ,
629
+ lsm6dsv16x -> iodev ,
630
+ fifo_regs ,
631
+ ARRAY_SIZE (fifo_regs ),
632
+ lsm6dsv16x -> bus_type ,
633
+ rbuf ,
634
+ lsm6dsv16x -> streaming_sqe ,
635
+ dev ,
636
+ lsm6dsv16x_complete_op_cb );
659
637
}
660
638
}
661
639
@@ -711,6 +689,9 @@ void lsm6dsv16x_stream_irq_handler(const struct device *dev)
711
689
#endif
712
690
lsm6dsv16x -> fifo_status [0 ] = lsm6dsv16x -> fifo_status [1 ] = 0 ;
713
691
692
+ uint8_t fifo_regs [] = { LSM6DSV16X_FIFO_STATUS1 , };
693
+ struct rtio_reg_buf rbuf [] = { {lsm6dsv16x -> fifo_status , 2 }, };
694
+
714
695
/*
715
696
* Prepare rtio enabled bus to read LSM6DSV16X_FIFO_STATUS1 and
716
697
* LSM6DSV16X_FIFO_STATUS2 registers where FIFO threshold condition and
@@ -723,8 +704,16 @@ void lsm6dsv16x_stream_irq_handler(const struct device *dev)
723
704
*
724
705
* lsm6dsv16x_fifo_status_get(&dev_ctx, &fifo_status);
725
706
*/
726
- lsm6dsv16x_rtio_rw_transaction (dev , LSM6DSV16X_FIFO_STATUS1 ,
727
- lsm6dsv16x -> fifo_status , 2 , lsm6dsv16x_read_fifo_cb );
707
+ rtio_read_transaction (lsm6dsv16x -> rtio_ctx ,
708
+ lsm6dsv16x -> iodev ,
709
+ fifo_regs ,
710
+ ARRAY_SIZE (fifo_regs ),
711
+ lsm6dsv16x -> bus_type ,
712
+ rbuf ,
713
+ lsm6dsv16x -> streaming_sqe ,
714
+ dev ,
715
+ lsm6dsv16x_read_fifo_cb );
716
+
728
717
#if LSM6DSVXXX_ANY_INST_ON_BUS_STATUS_OKAY (i3c )
729
718
}
730
719
#endif
@@ -734,6 +723,9 @@ void lsm6dsv16x_stream_irq_handler(const struct device *dev)
734
723
if (lsm6dsv16x -> trig_cfg .int_drdy ) {
735
724
lsm6dsv16x -> status = 0 ;
736
725
726
+ uint8_t fifo_regs [] = { LSM6DSV16X_STATUS_REG , };
727
+ struct rtio_reg_buf rbuf [] = { {& lsm6dsv16x -> status , 1 }, };
728
+
737
729
/*
738
730
* Prepare rtio enabled bus to read LSM6DSV16X_STATUS_REG register
739
731
* where accelerometer and gyroscope data ready status is available.
@@ -745,7 +737,14 @@ void lsm6dsv16x_stream_irq_handler(const struct device *dev)
745
737
*
746
738
* lsm6dsv16x_flag_data_ready_get(&dev_ctx, &drdy);
747
739
*/
748
- lsm6dsv16x_rtio_rw_transaction (dev , LSM6DSV16X_STATUS_REG ,
749
- & lsm6dsv16x -> status , 1 , lsm6dsv16x_read_status_cb );
740
+ rtio_read_transaction (lsm6dsv16x -> rtio_ctx ,
741
+ lsm6dsv16x -> iodev ,
742
+ fifo_regs ,
743
+ ARRAY_SIZE (fifo_regs ),
744
+ lsm6dsv16x -> bus_type ,
745
+ rbuf ,
746
+ lsm6dsv16x -> streaming_sqe ,
747
+ dev ,
748
+ lsm6dsv16x_read_status_cb );
750
749
}
751
750
}
0 commit comments