]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
media: ti-vpe: cal: Fix pixel processing parameters
authorBenoit Parrot <bparrot@ti.com>
Tue, 12 Nov 2019 14:53:37 +0000 (15:53 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 9 Dec 2019 10:28:07 +0000 (11:28 +0100)
The pixel processing unit was hard coded to only handle 8 bits per pixel
from input to output.

We now add handling for 10, 12 and 16 bits per pixel at the source and
setting the in-memory size (i.e. container size) to 16 bits for these 3
cases.

Signed-off-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/ti-vpe/cal.c

index 51edc7bc3135e8c4f6150b95e8b7d524577a5105..1b4a74f0d7513e97f3bf6ba4a7e6039ef4a9c337 100644 (file)
@@ -800,13 +800,48 @@ static void csi2_ctx_config(struct cal_ctx *ctx)
 
 static void pix_proc_config(struct cal_ctx *ctx)
 {
-       u32 val;
+       u32 val, extract, pack;
+
+       switch (ctx->fmt->bpp) {
+       case 8:
+               extract = CAL_PIX_PROC_EXTRACT_B8;
+               pack = CAL_PIX_PROC_PACK_B8;
+               break;
+       case 10:
+               extract = CAL_PIX_PROC_EXTRACT_B10_MIPI;
+               pack = CAL_PIX_PROC_PACK_B16;
+               break;
+       case 12:
+               extract = CAL_PIX_PROC_EXTRACT_B12_MIPI;
+               pack = CAL_PIX_PROC_PACK_B16;
+               break;
+       case 16:
+               extract = CAL_PIX_PROC_EXTRACT_B16_LE;
+               pack = CAL_PIX_PROC_PACK_B16;
+               break;
+       default:
+               /*
+                * If you see this warning then it means that you added
+                * some new entry in the cal_formats[] array with a different
+                * bit per pixel values then the one supported below.
+                * Either add support for the new bpp value below or adjust
+                * the new entry to use one of the value below.
+                *
+                * Instead of failing here just use 8 bpp as a default.
+                */
+               dev_warn_once(&ctx->dev->pdev->dev,
+                             "%s:%d:%s: bpp:%d unsupported! Overwritten with 8.\n",
+                             __FILE__, __LINE__, __func__, ctx->fmt->bpp);
+               extract = CAL_PIX_PROC_EXTRACT_B8;
+               pack = CAL_PIX_PROC_PACK_B8;
+               break;
+       }
 
        val = reg_read(ctx->dev, CAL_PIX_PROC(ctx->csi2_port));
-       set_field(&val, CAL_PIX_PROC_EXTRACT_B8, CAL_PIX_PROC_EXTRACT_MASK);
+       set_field(&val, extract, CAL_PIX_PROC_EXTRACT_MASK);
        set_field(&val, CAL_PIX_PROC_DPCMD_BYPASS, CAL_PIX_PROC_DPCMD_MASK);
        set_field(&val, CAL_PIX_PROC_DPCME_BYPASS, CAL_PIX_PROC_DPCME_MASK);
-       set_field(&val, CAL_PIX_PROC_PACK_B8, CAL_PIX_PROC_PACK_MASK);
+       set_field(&val, pack, CAL_PIX_PROC_PACK_MASK);
        set_field(&val, ctx->csi2_port, CAL_PIX_PROC_CPORT_MASK);
        set_field(&val, CAL_GEN_ENABLE, CAL_PIX_PROC_EN_MASK);
        reg_write(ctx->dev, CAL_PIX_PROC(ctx->csi2_port), val);