Commit 066f7867 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Mauro Carvalho Chehab
Browse files

[media] V4L: sh_mobile_ceu_camera: implement .stop_streaming()



The .stop_streaming() videobuf2 operation has to be implemented to
guarantee, that video buffers are not written to after a STREAMOFF.

Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c68956c1
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -427,6 +427,26 @@ static int sh_mobile_ceu_videobuf_init(struct vb2_buffer *vb)
	return 0;
}

static int sh_mobile_ceu_stop_streaming(struct vb2_queue *q)
{
	struct soc_camera_device *icd = container_of(q, struct soc_camera_device, vb2_vidq);
	struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
	struct sh_mobile_ceu_dev *pcdev = ici->priv;
	struct list_head *buf_head, *tmp;
	unsigned long flags;

	spin_lock_irqsave(&pcdev->lock, flags);

	pcdev->active = NULL;

	list_for_each_safe(buf_head, tmp, &pcdev->capture)
		list_del_init(buf_head);

	spin_unlock_irqrestore(&pcdev->lock, flags);

	return sh_mobile_ceu_soft_reset(pcdev);
}

static struct vb2_ops sh_mobile_ceu_videobuf_ops = {
	.queue_setup	= sh_mobile_ceu_videobuf_setup,
	.buf_prepare	= sh_mobile_ceu_videobuf_prepare,
@@ -435,6 +455,7 @@ static struct vb2_ops sh_mobile_ceu_videobuf_ops = {
	.buf_init	= sh_mobile_ceu_videobuf_init,
	.wait_prepare	= soc_camera_unlock,
	.wait_finish	= soc_camera_lock,
	.stop_streaming	= sh_mobile_ceu_stop_streaming,
};

static irqreturn_t sh_mobile_ceu_irq(int irq, void *data)