]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: rockchip: rga: fix sequence number handling
authorMichael Tretter <m.tretter@pengutronix.de>
Tue, 28 May 2024 14:05:14 +0000 (16:05 +0200)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Fri, 31 May 2024 11:51:17 +0000 (13:51 +0200)
The RGA driver didn't set the sequence numbers of the returned buffers.

Keep track of the CAPTURE and OUTPUT sequence numbers, and set the
sequence numbers in the source and destination buffers.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/rockchip/rga/rga-buf.c
drivers/media/platform/rockchip/rga/rga.c
drivers/media/platform/rockchip/rga/rga.h

index 662c81b6d0b592add97c1f8d5f0906c087a0e21e..70808049d2e810dadc76d2adfa366ec4f4d046a9 100644 (file)
@@ -195,6 +195,11 @@ static int rga_buf_start_streaming(struct vb2_queue *q, unsigned int count)
                return ret;
        }
 
+       if (V4L2_TYPE_IS_OUTPUT(q->type))
+               ctx->osequence = 0;
+       else
+               ctx->csequence = 0;
+
        return 0;
 }
 
index 00fdfa9e10bc1f46cc2b46be1fc7500ee40dc06a..0e768f3e9edab404c97931b572d1471929415bf1 100644 (file)
@@ -43,6 +43,8 @@ static void device_run(void *prv)
        rga->curr = ctx;
 
        src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
+       src->sequence = ctx->osequence++;
+
        dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
 
        rga_hw_start(rga, vb_to_rga(src), vb_to_rga(dst));
@@ -75,6 +77,8 @@ static irqreturn_t rga_isr(int irq, void *prv)
 
                v4l2_m2m_buf_copy_metadata(src, dst, true);
 
+               dst->sequence = ctx->csequence++;
+
                v4l2_m2m_buf_done(src, VB2_BUF_STATE_DONE);
                v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
                v4l2_m2m_job_finish(rga->m2m_dev, ctx->fh.m2m_ctx);
index 3502dff6055c927bcba9102d59ddeddc7c7a1776..8105bb2efe570f36f88c62e7c02bb7e0f73a0e08 100644 (file)
@@ -57,6 +57,9 @@ struct rga_ctx {
        struct rga_frame out;
        struct v4l2_ctrl_handler ctrl_handler;
 
+       int osequence;
+       int csequence;
+
        /* Control values */
        u32 op;
        u32 hflip;