From 1716bf42006901a57827abfc97e8108cb8ea46dd Mon Sep 17 00:00:00 2001 From: Xu Hongfei Date: Mon, 8 Jul 2019 15:48:41 +0800 Subject: [PATCH] media: rockchip: cif: fix the bug that dummpy buffer size is error Change-Id: I8826e3452a3bd460b331a1adfceebffb6469a1a2 Signed-off-by: Xu Hongfei --- drivers/media/platform/rockchip/cif/capture.c | 11 +++++++++++ drivers/media/platform/rockchip/cif/version.h | 1 + 2 files changed, 12 insertions(+) diff --git a/drivers/media/platform/rockchip/cif/capture.c b/drivers/media/platform/rockchip/cif/capture.c index 8d558176f449..5250e0beae60 100644 --- a/drivers/media/platform/rockchip/cif/capture.c +++ b/drivers/media/platform/rockchip/cif/capture.c @@ -943,6 +943,7 @@ static void rkcif_buf_queue(struct vb2_buffer *vb) static int rkcif_create_dummy_buf(struct rkcif_stream *stream) { + u32 fourcc; struct rkcif_dummy_buffer *dummy_buf = &stream->dummy_buf; struct rkcif_device *dev = stream->cifdev; @@ -951,6 +952,16 @@ static int rkcif_create_dummy_buf(struct rkcif_stream *stream) stream->pixm.height, stream->pixm.plane_fmt[1].sizeimage, stream->pixm.plane_fmt[2].sizeimage); + /* + * rk cif don't support output yuyv fmt data + * if user request yuyv fmt, the input mode must be RAW8 + * and the width is double Because the real input fmt is + * yuyv + */ + fourcc = stream->cif_fmt_out->fourcc; + if (fourcc == V4L2_PIX_FMT_YUYV || fourcc == V4L2_PIX_FMT_YVYU || + fourcc == V4L2_PIX_FMT_UYVY || fourcc == V4L2_PIX_FMT_VYUY) + dummy_buf->size *= 2; dummy_buf->vaddr = dma_alloc_coherent(dev->dev, dummy_buf->size, &dummy_buf->dma_addr, diff --git a/drivers/media/platform/rockchip/cif/version.h b/drivers/media/platform/rockchip/cif/version.h index c0d59841a47c..6cdb6f569c29 100644 --- a/drivers/media/platform/rockchip/cif/version.h +++ b/drivers/media/platform/rockchip/cif/version.h @@ -18,6 +18,7 @@ *3. Support cif works with mipi channel for rk3288 *4. Support switching between oneframe and pingpong for cif *5. Support sampling raw data for cif + *6. fix the bug that dummpy buffer size is error */ #define RKCIF_DRIVER_VERSION KERNEL_VERSION(0, 1, 0x2)