@@ -1437,23 +1437,11 @@ static void rkisp1_destroy_dummy_buf(struct rkisp1_stream *stream)
14371437 dummy_buf -> vaddr , dummy_buf -> dma_addr );
14381438}
14391439
1440- static void rkisp1_stop_streaming (struct vb2_queue * queue )
1440+ static void destroy_buf_queue (struct rkisp1_stream * stream ,
1441+ enum vb2_buffer_state state )
14411442{
1442- struct rkisp1_stream * stream = queue -> drv_priv ;
1443- struct rkisp1_vdev_node * node = & stream -> vnode ;
1444- struct rkisp1_device * dev = stream -> ispdev ;
1445- struct v4l2_device * v4l2_dev = & dev -> v4l2_dev ;
14461443 struct rkisp1_buffer * buf ;
14471444 unsigned long lock_flags = 0 ;
1448- int ret ;
1449-
1450- rkisp1_stream_stop (stream );
1451- /* call to the other devices */
1452- media_entity_pipeline_stop (& node -> vdev .entity );
1453- ret = dev -> pipe .set_stream (& dev -> pipe , false);
1454- if (ret < 0 )
1455- v4l2_err (v4l2_dev , "pipeline stream-off failed error:%d\n" ,
1456- ret );
14571445
14581446 /* release buffers */
14591447 spin_lock_irqsave (& stream -> vbq_lock , lock_flags );
@@ -1471,10 +1459,31 @@ static void rkisp1_stop_streaming(struct vb2_queue *queue)
14711459 buf = list_first_entry (& stream -> buf_queue ,
14721460 struct rkisp1_buffer , queue );
14731461 list_del (& buf -> queue );
1474- vb2_buffer_done (& buf -> vb .vb2_buf , VB2_BUF_STATE_ERROR );
1462+ vb2_buffer_done (& buf -> vb .vb2_buf , state );
14751463 }
14761464 spin_unlock_irqrestore (& stream -> vbq_lock , lock_flags );
14771465
1466+ }
1467+
1468+ static void rkisp1_stop_streaming (struct vb2_queue * queue )
1469+ {
1470+ struct rkisp1_stream * stream = queue -> drv_priv ;
1471+ struct rkisp1_vdev_node * node = & stream -> vnode ;
1472+ struct rkisp1_device * dev = stream -> ispdev ;
1473+ struct v4l2_device * v4l2_dev = & dev -> v4l2_dev ;
1474+ int ret ;
1475+
1476+ rkisp1_stream_stop (stream );
1477+ /* call to the other devices */
1478+ media_entity_pipeline_stop (& node -> vdev .entity );
1479+ ret = dev -> pipe .set_stream (& dev -> pipe , false);
1480+ if (ret < 0 )
1481+ v4l2_err (v4l2_dev , "pipeline stream-off failed error:%d\n" ,
1482+ ret );
1483+
1484+ /* release buffers */
1485+ destroy_buf_queue (stream , VB2_BUF_STATE_ERROR );
1486+
14781487 ret = dev -> pipe .close (& dev -> pipe );
14791488 if (ret < 0 )
14801489 v4l2_err (v4l2_dev , "pipeline close failed error:%d\n" , ret );
@@ -1524,7 +1533,6 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count)
15241533 struct rkisp1_device * dev = stream -> ispdev ;
15251534 struct v4l2_device * v4l2_dev = & dev -> v4l2_dev ;
15261535 int ret ;
1527- unsigned int i ;
15281536
15291537 if (WARN_ON (stream -> streaming ))
15301538 return - EBUSY ;
@@ -1594,14 +1602,8 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count)
15941602destroy_dummy_buf :
15951603 rkisp1_destroy_dummy_buf (stream );
15961604buffer_done :
1597- for (i = 0 ; i < queue -> num_buffers ; ++ i ) {
1598- struct vb2_buffer * vb ;
1599-
1600- vb = queue -> bufs [i ];
1601- if (vb -> state == VB2_BUF_STATE_ACTIVE )
1602- vb2_buffer_done (vb , VB2_BUF_STATE_QUEUED );
1603- }
1604-
1605+ destroy_buf_queue (stream , VB2_BUF_STATE_QUEUED );
1606+ stream -> streaming = false;
16051607 return ret ;
16061608}
16071609
0 commit comments