@@ -46,7 +46,6 @@ struct video_stm32_dcmi_data {
46
46
struct k_fifo fifo_out ;
47
47
struct video_buffer * vbuf ;
48
48
bool snapshot_mode : 1 ;
49
- bool dma_error_detected : 1 ;
50
49
};
51
50
52
51
struct video_stm32_dcmi_config {
@@ -63,25 +62,21 @@ static void stm32_dcmi_process_dma_error(DCMI_HandleTypeDef *hdcmi)
63
62
struct video_stm32_dcmi_data * dev_data =
64
63
CONTAINER_OF (hdcmi , struct video_stm32_dcmi_data , hdcmi );
65
64
66
- if (dev_data -> snapshot_mode ) {
67
- dev_data -> dma_error_detected = true;
68
- k_fifo_cancel_wait (& dev_data -> fifo_out );
69
- } else {
70
- LOG_ERR ("Restart DMA after Error!" );
71
- /* Lets try to recover by stopping and maybe restart */
72
- if (HAL_DCMI_Stop (& dev_data -> hdcmi ) != HAL_OK ) {
73
- LOG_WRN ("HAL_DCMI_Stop FAILED!" );
74
- return ;
75
- }
76
-
77
- /* error on last transfer try to restart it */
78
- if (HAL_DCMI_Start_DMA (& dev_data -> hdcmi , DCMI_MODE_CONTINUOUS ,
79
- (uint32_t )dev_data -> vbuf -> buffer ,
80
- dev_data -> vbuf -> size / 4 ) != HAL_OK ) {
81
- LOG_WRN ("Continuous: HAL_DCMI_Start_DMA FAILED!" );
82
- return ;
83
- }
84
- }
65
+ LOG_WRN ("Restart DMA after Error!" );
66
+ /* Lets try to recover by stopping and maybe restart */
67
+ if (HAL_DCMI_Stop (& dev_data -> hdcmi ) != HAL_OK ) {
68
+ LOG_WRN ("HAL_DCMI_Stop FAILED!" );
69
+ return ;
70
+ }
71
+
72
+ /* error on last transfer try to restart it */
73
+ if (HAL_DCMI_Start_DMA (& dev_data -> hdcmi ,
74
+ dev_data -> snapshot_mode ? DCMI_MODE_SNAPSHOT : DCMI_MODE_CONTINUOUS ,
75
+ (uint32_t )dev_data -> vbuf -> buffer ,
76
+ dev_data -> vbuf -> size / 4 ) != HAL_OK ) {
77
+ LOG_WRN ("Continuous: HAL_DCMI_Start_DMA FAILED!" );
78
+ return ;
79
+ }
85
80
}
86
81
87
82
void HAL_DCMI_ErrorCallback (DCMI_HandleTypeDef * hdcmi )
@@ -363,23 +358,6 @@ static int video_stm32_dcmi_dequeue(const struct device *dev, struct video_buffe
363
358
* vbuf = k_fifo_get (& data -> fifo_out , timeout );
364
359
printk ("k_fifo_get returned: %p\n" , * vbuf );
365
360
366
- if (data -> dma_error_detected ) {
367
- data -> dma_error_detected = false;
368
- printk ("\tDMA Error detected\n" );
369
-
370
- /* Should only happen in snapshot mode */
371
- if (data -> snapshot_mode ) {
372
- if (HAL_DCMI_Stop (& data -> hdcmi ) != HAL_OK ) {
373
- LOG_WRN ("HAL_DCMI_Stop FAILED!" );
374
- }
375
- if (data -> vbuf != NULL ) {
376
- printk ("\treturn buffer: %p\n" , data -> vbuf );
377
- k_fifo_put (& data -> fifo_in , data -> vbuf );
378
- data -> vbuf = NULL ;
379
- }
380
- }
381
- }
382
-
383
361
if (* vbuf == NULL ) {
384
362
return - EAGAIN ;
385
363
}
@@ -646,7 +624,6 @@ static int video_stm32_dcmi_init(const struct device *dev)
646
624
}
647
625
648
626
/* See if we should initialize to only support snapshot mode or not */
649
- data -> dma_error_detected = false;
650
627
data -> snapshot_mode = config -> snapshot_mode ;
651
628
if (CONFIG_VIDEO_BUFFER_POOL_NUM_MAX == 1 ) {
652
629
LOG_DBG ("Only one buffer so snapshot mode only" );
0 commit comments