From ffd3865c49356bfbfd66f72f3f2edfb86774cc7e Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Mon, 27 Sep 2021 14:40:37 +0800 Subject: [PATCH] media: rockchip: isp: fix bottom image for debayer with extend line Change-Id: Ie6e4a7e9744be498f594ad7f03351b771a6236c1 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/dmarx.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/media/platform/rockchip/isp/dmarx.c b/drivers/media/platform/rockchip/isp/dmarx.c index 706a8b819ed2..1ed365000a23 100644 --- a/drivers/media/platform/rockchip/isp/dmarx.c +++ b/drivers/media/platform/rockchip/isp/dmarx.c @@ -537,6 +537,26 @@ static void rkisp_buf_queue(struct vb2_buffer *vb) memset(ispbuf->buff_addr, 0, sizeof(ispbuf->buff_addr)); for (i = 0; i < isp_fmt->mplanes; i++) { + void *vaddr = vb2_plane_vaddr(vb, i); + + if (vaddr && i == 0 && + stream->ispdev->isp_ver == ISP_V20 && + stream->ispdev->rd_mode == HDR_RDBK_FRAME1 && + RKMODULE_EXTEND_LINE >= 8 && + isp_fmt->fmt_type == FMT_BAYER && + stream->id == RKISP_STREAM_RAWRD2) { + u32 line = pixm->plane_fmt[0].bytesperline; + u32 val = 8; + + vaddr += line * (pixm->height - 2); + while (val) { + memcpy(vaddr + line * val, vaddr, line * 2); + val -= 2; + } + if (vb->vb2_queue->mem_ops->prepare) + vb->vb2_queue->mem_ops->prepare(vb->planes[0].mem_priv); + } + if (stream->ispdev->hw_dev->is_dma_sg_ops) { sgt = vb2_dma_sg_plane_desc(vb, i); ispbuf->buff_addr[i] = sg_dma_address(sgt->sgl);