Commit 6692871a authored by Lad, Prabhakar's avatar Lad, Prabhakar Committed by Mauro Carvalho Chehab

[media] media: blackfin: bfin_capture: release buffers in case start_streaming() call back fails

this patch adds support to release the buffer by calling
vb2_buffer_done(), with state marked as VB2_BUF_STATE_QUEUED
if start_streaming() call back fails.
Signed-off-by: default avatarLad, Prabhakar <prabhakar.csengg@gmail.com>
Tested-by: default avatarScott Jiang <scott.jiang.linux@gmail.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent b4e81b23
...@@ -345,6 +345,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -345,6 +345,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
{ {
struct bcap_device *bcap_dev = vb2_get_drv_priv(vq); struct bcap_device *bcap_dev = vb2_get_drv_priv(vq);
struct ppi_if *ppi = bcap_dev->ppi; struct ppi_if *ppi = bcap_dev->ppi;
struct bcap_buffer *buf, *tmp;
struct ppi_params params; struct ppi_params params;
int ret; int ret;
...@@ -352,7 +353,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -352,7 +353,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
ret = v4l2_subdev_call(bcap_dev->sd, video, s_stream, 1); ret = v4l2_subdev_call(bcap_dev->sd, video, s_stream, 1);
if (ret && (ret != -ENOIOCTLCMD)) { if (ret && (ret != -ENOIOCTLCMD)) {
v4l2_err(&bcap_dev->v4l2_dev, "stream on failed in subdev\n"); v4l2_err(&bcap_dev->v4l2_dev, "stream on failed in subdev\n");
return ret; goto err;
} }
/* set ppi params */ /* set ppi params */
...@@ -391,7 +392,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -391,7 +392,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
if (ret < 0) { if (ret < 0) {
v4l2_err(&bcap_dev->v4l2_dev, v4l2_err(&bcap_dev->v4l2_dev,
"Error in setting ppi params\n"); "Error in setting ppi params\n");
return ret; goto err;
} }
/* attach ppi DMA irq handler */ /* attach ppi DMA irq handler */
...@@ -399,12 +400,21 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -399,12 +400,21 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
if (ret < 0) { if (ret < 0) {
v4l2_err(&bcap_dev->v4l2_dev, v4l2_err(&bcap_dev->v4l2_dev,
"Error in attaching interrupt handler\n"); "Error in attaching interrupt handler\n");
return ret; goto err;
} }
reinit_completion(&bcap_dev->comp); reinit_completion(&bcap_dev->comp);
bcap_dev->stop = false; bcap_dev->stop = false;
return 0; return 0;
err:
list_for_each_entry_safe(buf, tmp, &bcap_dev->dma_queue, list) {
list_del(&buf->list);
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
}
return ret;
} }
static void bcap_stop_streaming(struct vb2_queue *vq) static void bcap_stop_streaming(struct vb2_queue *vq)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment