MLK-17487: pxp: fix pxp yuv to yuv generate color dots issue
authorGuoniu.Zhou <guoniu.zhou@nxp.com>
Fri, 23 Mar 2018 03:41:49 +0000 (11:41 +0800)
committerHaibo Chen <haibo.chen@nxp.com>
Thu, 12 Apr 2018 10:45:56 +0000 (18:45 +0800)
When PxP convert yuyv to nv12 format, some color dots will
introdue to output image. IC recommend that YCBCR_MODE and
BYPASS bit of CSC1_COEF0 should be 1.

Reviewed-by: robby.cai <robby.cai@nxp.com>
Signed-off-by: Guoniu.Zhou <guoniu.zhou@nxp.com>
drivers/dma/pxp/pxp_dma_v3.c

index 5a613e9..48c3144 100644 (file)
@@ -3021,7 +3021,6 @@ static int pxp_2d_task_config(struct pxp_pixmap *input,
 {
        uint8_t position = 0;
 
-
        do {
                position = find_next_bit((unsigned long *)&nodes_used, 32, position);
                if (position >= sizeof(uint32_t) * 8)
@@ -3151,6 +3150,7 @@ static int pxp_2d_op_handler(struct pxps *pxp)
        uint32_t partial_nodes_used = 0;
        uint32_t nodes_used_s0 = 0, nodes_used_s1 = 0;
        uint32_t nodes_in_path_s0, nodes_in_path_s1;
+       uint32_t val;
 
        output = &task->output[0];
        if (!output->pitch)
@@ -3287,6 +3287,13 @@ reparse:
                pr_debug("%s: path_ctrl0 = 0x%x\n",
                         __func__, *(uint32_t *)&path_ctrl0);
                pxp_2d_task_config(input, output, op, nodes_used);
+
+               if (is_yuv(input->format) && is_yuv(output->format)) {
+                       val = readl(pxp_reg_base + HW_PXP_CSC1_COEF0);
+                       val |= (BF_PXP_CSC1_COEF0_YCBCR_MODE(1) |
+                                       BF_PXP_CSC1_COEF0_BYPASS(1));
+                       pxp_writel(val, HW_PXP_CSC1_COEF0);
+               }
                break;
        case 2:
                /* Composite */