19
19
#include <fsl_cache.h>
20
20
#endif
21
21
22
+ #include "video_buffer.h"
22
23
#include "video_device.h"
23
24
24
25
struct video_mcux_csi_config {
@@ -40,11 +41,9 @@ static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle, status_t statu
40
41
const struct device * dev = data -> dev ;
41
42
const struct video_mcux_csi_config * config = dev -> config ;
42
43
enum video_signal_result result = VIDEO_BUF_DONE ;
43
- // struct video_buffer *vbuf, *vbuf_first = NULL;
44
44
uint32_t buffer_addr ;
45
45
46
46
/* IRQ context */
47
-
48
47
if (status != kStatus_CSI_FrameDone ) {
49
48
return ;
50
49
}
@@ -55,22 +54,24 @@ static void __frame_done_cb(CSI_Type *base, csi_handle_t *handle, status_t statu
55
54
return ;
56
55
}
57
56
58
- struct video_buffer * vbuf = video_get_buf_sqe (& data -> io_q );
57
+ struct rtio_iodev_sqe * iodev_sqe = video_pop_io_q (& data -> io_q );
59
58
60
- if (( uint32_t ) vbuf -> buffer != buffer_addr ) {
59
+ if (iodev_sqe == NULL ) {
61
60
return ;
62
61
}
63
62
64
- vbuf -> timestamp = k_uptime_get_32 ();
63
+
64
+ struct video_buffer * vbuf = iodev_sqe -> sqe .userdata ;
65
65
66
66
#ifdef CONFIG_HAS_MCUX_CACHE
67
67
DCACHE_InvalidateByRange (buffer_addr , vbuf -> bytesused );
68
68
#endif
69
69
70
- // k_fifo_put(&data->fifo_out, vbuf);
70
+ if ((uint32_t )vbuf -> buffer != buffer_addr ) {
71
+ return ;
72
+ }
71
73
72
- struct mpsc_node * node = mpsc_pop (& data -> io_q );
73
- struct rtio_iodev_sqe * iodev_sqe = CONTAINER_OF (node , struct rtio_iodev_sqe , q );
74
+ vbuf -> timestamp = k_uptime_get_32 ();
74
75
75
76
rtio_iodev_sqe_ok (iodev_sqe , 0 );
76
77
@@ -307,35 +308,70 @@ static int video_mcux_csi_enum_frmival(const struct device *dev, struct video_fr
307
308
return ret ;
308
309
}
309
310
310
- static int video_mcux_csi_enqueue (const struct device * dev , struct video_buffer * vbuf )
311
+ // static int video_mcux_csi_enqueue(const struct device *dev, struct video_buffer *vbuf)
312
+ // {
313
+ // const struct video_mcux_csi_config *config = dev->config;
314
+ // struct video_mcux_csi_data *data = dev->data;
315
+ // unsigned int to_read;
316
+ // status_t ret;
317
+
318
+ // struct rtio_iodev_sqe *iodev_sqe = video_pop_io_q(&data->io_q);
319
+
320
+ // if (iodev_sqe == NULL) {
321
+ // return -EIO;
322
+ // }
323
+
324
+ // struct video_buffer *vbuf = iodev_sqe->sqe.userdata;
325
+
326
+ // to_read = data->csi_config.linePitch_Bytes * data->csi_config.height;
327
+ // vbuf->bytesused = to_read;
328
+ // vbuf->line_offset = 0;
329
+
330
+ // ret = CSI_TransferSubmitEmptyBuffer(config->base, &data->csi_handle,
331
+ // (uint32_t)vbuf->buffer);
332
+ // if (ret != kStatus_Success) {
333
+ // return -EIO;
334
+ // }
335
+
336
+ // return 0;
337
+ // }
338
+
339
+ static void video_mcux_csi_iodev_submit (const struct device * dev , struct rtio_iodev_sqe * iodev_sqe )
311
340
{
341
+
312
342
const struct video_mcux_csi_config * config = dev -> config ;
313
343
struct video_mcux_csi_data * data = dev -> data ;
314
- unsigned int to_read ;
344
+ struct video_buffer * vbuf = iodev_sqe -> sqe . userdata ;
315
345
status_t ret ;
316
346
317
- to_read = data -> csi_config .linePitch_Bytes * data -> csi_config .height ;
318
- vbuf -> bytesused = to_read ;
347
+ // struct rtio_iodev_sqe *iodev_sqe = video_pop_io_q(&data->io_q);
348
+
349
+ // if (iodev_sqe == NULL) {
350
+ // return -EIO;
351
+ // }
352
+
353
+ vbuf -> bytesused = data -> csi_config .linePitch_Bytes * data -> csi_config .height ;
319
354
vbuf -> line_offset = 0 ;
320
355
321
356
ret = CSI_TransferSubmitEmptyBuffer (config -> base , & data -> csi_handle ,
322
357
(uint32_t )vbuf -> buffer );
323
358
if (ret != kStatus_Success ) {
324
- return - EIO ;
359
+ return ;
325
360
}
326
361
327
- return 0 ;
362
+ return ;
328
363
}
329
364
330
365
static DEVICE_API (video , video_mcux_csi_driver_api ) = {
331
366
.set_format = video_mcux_csi_set_fmt ,
332
367
.get_format = video_mcux_csi_get_fmt ,
333
368
.set_stream = video_mcux_csi_set_stream ,
334
- .enqueue = video_mcux_csi_enqueue ,
369
+ // .enqueue = video_mcux_csi_enqueue,
335
370
.get_caps = video_mcux_csi_get_caps ,
336
371
.set_frmival = video_mcux_csi_set_frmival ,
337
372
.get_frmival = video_mcux_csi_get_frmival ,
338
373
.enum_frmival = video_mcux_csi_enum_frmival ,
374
+ .iodev_submit = video_mcux_csi_iodev_submit ,
339
375
};
340
376
341
377
#if 1 /* Unique Instance */
0 commit comments