From: Hans Verkuil <hans.verkuil@xxxxxxxxx> Use the new 'new_cookies' flag to determine when the risc program needs to be regenerated. Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> --- drivers/media/pci/cx23885/cx23885-417.c | 4 ++-- drivers/media/pci/cx23885/cx23885-core.c | 7 ++++++- drivers/media/pci/cx23885/cx23885-dvb.c | 4 ++-- drivers/media/pci/cx23885/cx23885-vbi.c | 7 +++++-- drivers/media/pci/cx23885/cx23885-video.c | 7 +++++-- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/media/pci/cx23885/cx23885-417.c b/drivers/media/pci/cx23885/cx23885-417.c index 5d36950..c7f2c54 100644 --- a/drivers/media/pci/cx23885/cx23885-417.c +++ b/drivers/media/pci/cx23885/cx23885-417.c @@ -1162,7 +1162,7 @@ static int buffer_prepare(struct vb2_buffer *vb) return cx23885_buf_prepare(buf, &dev->ts1); } -static void buffer_finish_for_cpu(struct vb2_buffer *vb) +static void buffer_cleanup(struct vb2_buffer *vb) { struct cx23885_dev *dev = vb->vb2_queue->drv_priv; struct cx23885_buffer *buf = container_of(vb, @@ -1224,7 +1224,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q) static struct vb2_ops cx23885_qops = { .queue_setup = queue_setup, .buf_prepare = buffer_prepare, - .buf_finish_for_cpu = buffer_finish_for_cpu, + .buf_cleanup = buffer_cleanup, .buf_queue = buffer_queue, .wait_prepare = vb2_ops_wait_prepare, .wait_finish = vb2_ops_wait_finish, diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c index e2e5afb..6b2dac0 100644 --- a/drivers/media/pci/cx23885/cx23885-core.c +++ b/drivers/media/pci/cx23885/cx23885-core.c @@ -1249,7 +1249,9 @@ void cx23885_free_buffer(struct cx23885_dev *dev, struct cx23885_buffer *buf) struct cx23885_riscmem *risc = &buf->risc; BUG_ON(in_interrupt()); - pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); + if (risc->cpu) + pci_free_consistent(dev->pci, risc->size, risc->cpu, risc->dma); + risc->cpu = NULL; } static void cx23885_tsport_reg_dump(struct cx23885_tsport *port) @@ -1459,6 +1461,9 @@ int cx23885_buf_prepare(struct cx23885_buffer *buf, struct cx23885_tsport *port) return -EINVAL; vb2_set_plane_payload(&buf->vb, 0, size); + if (!buf->vb.new_cookies) + return 0; + cx23885_risc_databuffer(dev->pci, &buf->risc, sgt->sgl, port->ts_packet_size, port->ts_packet_count, 0); diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 77eb034..d8fc87f 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c @@ -112,7 +112,7 @@ static int buffer_prepare(struct vb2_buffer *vb) return cx23885_buf_prepare(buf, port); } -static void buffer_finish_for_cpu(struct vb2_buffer *vb) +static void buffer_cleanup(struct vb2_buffer *vb) { struct cx23885_tsport *port = vb->vb2_queue->drv_priv; struct cx23885_dev *dev = port->dev; @@ -168,7 +168,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q) static struct vb2_ops dvb_qops = { .queue_setup = queue_setup, .buf_prepare = buffer_prepare, - .buf_finish_for_cpu = buffer_finish_for_cpu, + .buf_cleanup = buffer_cleanup, .buf_queue = buffer_queue, .wait_prepare = vb2_ops_wait_prepare, .wait_finish = vb2_ops_wait_finish, diff --git a/drivers/media/pci/cx23885/cx23885-vbi.c b/drivers/media/pci/cx23885/cx23885-vbi.c index d7a69c6..b93626c 100644 --- a/drivers/media/pci/cx23885/cx23885-vbi.c +++ b/drivers/media/pci/cx23885/cx23885-vbi.c @@ -151,6 +151,9 @@ static int buffer_prepare(struct vb2_buffer *vb) return -EINVAL; vb2_set_plane_payload(vb, 0, lines * VBI_LINE_LENGTH * 2); + if (!vb->new_cookies) + return 0; + cx23885_risc_vbibuffer(dev->pci, &buf->risc, sgt->sgl, 0, VBI_LINE_LENGTH * lines, @@ -159,7 +162,7 @@ static int buffer_prepare(struct vb2_buffer *vb) return 0; } -static void buffer_finish_for_cpu(struct vb2_buffer *vb) +static void buffer_cleanup(struct vb2_buffer *vb) { struct cx23885_buffer *buf = container_of(vb, struct cx23885_buffer, vb); @@ -254,7 +257,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q) struct vb2_ops cx23885_vbi_qops = { .queue_setup = queue_setup, .buf_prepare = buffer_prepare, - .buf_finish_for_cpu = buffer_finish_for_cpu, + .buf_cleanup = buffer_cleanup, .buf_queue = buffer_queue, .wait_prepare = vb2_ops_wait_prepare, .wait_finish = vb2_ops_wait_finish, diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c index d533f4e..ba30fa8 100644 --- a/drivers/media/pci/cx23885/cx23885-video.c +++ b/drivers/media/pci/cx23885/cx23885-video.c @@ -342,6 +342,9 @@ static int buffer_prepare(struct vb2_buffer *vb) return -EINVAL; vb2_set_plane_payload(vb, 0, dev->height * buf->bpl); + if (!vb->new_cookies) + return 0; + switch (dev->field) { case V4L2_FIELD_TOP: cx23885_risc_buffer(dev->pci, &buf->risc, @@ -407,7 +410,7 @@ static int buffer_prepare(struct vb2_buffer *vb) return 0; } -static void buffer_finish_for_cpu(struct vb2_buffer *vb) +static void buffer_cleanup(struct vb2_buffer *vb) { struct cx23885_buffer *buf = container_of(vb, struct cx23885_buffer, vb); @@ -500,7 +503,7 @@ static void cx23885_stop_streaming(struct vb2_queue *q) static struct vb2_ops cx23885_video_qops = { .queue_setup = queue_setup, .buf_prepare = buffer_prepare, - .buf_finish_for_cpu = buffer_finish_for_cpu, + .buf_cleanup = buffer_cleanup, .buf_queue = buffer_queue, .wait_prepare = vb2_ops_wait_prepare, .wait_finish = vb2_ops_wait_finish, -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html