media: rkisp1: cap: initialize dma buf address in 'buf_init' cb
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Fri, 25 Jun 2021 08:23:09 +0000 (10:23 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 22 Jul 2021 12:01:54 +0000 (14:01 +0200)
Initializing the dma addresses of the capture buffers can
move to the 'buf_init' callback, since it is enough to do
it once for each buffer and not every time it is queued.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c

index 60cd220..41988eb 100644 (file)
@@ -750,7 +750,7 @@ static int rkisp1_vb2_queue_setup(struct vb2_queue *queue,
        return 0;
 }
 
-static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb)
+static int rkisp1_vb2_buf_init(struct vb2_buffer *vb)
 {
        struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
        struct rkisp1_buffer *ispbuf =
@@ -780,6 +780,15 @@ static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb)
        if (cap->pix.info->comp_planes == 3 && cap->pix.cfg->uv_swap)
                swap(ispbuf->buff_addr[RKISP1_PLANE_CR],
                     ispbuf->buff_addr[RKISP1_PLANE_CB]);
+       return 0;
+}
+
+static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb)
+{
+       struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+       struct rkisp1_buffer *ispbuf =
+               container_of(vbuf, struct rkisp1_buffer, vb);
+       struct rkisp1_capture *cap = vb->vb2_queue->drv_priv;
 
        spin_lock_irq(&cap->buf.lock);
        list_add_tail(&ispbuf->queue, &cap->buf.queue);
@@ -1039,6 +1048,7 @@ err_ret_buffers:
 
 static const struct vb2_ops rkisp1_vb2_ops = {
        .queue_setup = rkisp1_vb2_queue_setup,
+       .buf_init = rkisp1_vb2_buf_init,
        .buf_queue = rkisp1_vb2_buf_queue,
        .buf_prepare = rkisp1_vb2_buf_prepare,
        .wait_prepare = vb2_ops_wait_prepare,