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

[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
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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 ppi_if *ppi = bcap_dev->ppi;
	struct bcap_buffer *buf, *tmp;
	struct ppi_params params;
	int ret;

@@ -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);
	if (ret && (ret != -ENOIOCTLCMD)) {
		v4l2_err(&bcap_dev->v4l2_dev, "stream on failed in subdev\n");
		return ret;
		goto err;
	}

	/* set ppi params */
@@ -391,7 +392,7 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
	if (ret < 0) {
		v4l2_err(&bcap_dev->v4l2_dev,
				"Error in setting ppi params\n");
		return ret;
		goto err;
	}

	/* attach ppi DMA irq handler */
@@ -399,12 +400,21 @@ static int bcap_start_streaming(struct vb2_queue *vq, unsigned int count)
	if (ret < 0) {
		v4l2_err(&bcap_dev->v4l2_dev,
				"Error in attaching interrupt handler\n");
		return ret;
		goto err;
	}

	reinit_completion(&bcap_dev->comp);
	bcap_dev->stop = false;

	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)