video: lcdc: rk3228: fix colorspace for output YCBCR
authorMark Yao <mark.yao@rock-chips.com>
Thu, 29 Oct 2015 08:23:14 +0000 (16:23 +0800)
committerMark Yao <mark.yao@rock-chips.com>
Fri, 6 Nov 2015 00:36:28 +0000 (08:36 +0800)
Change-Id: I192a85c6d60a09c5f9a80b518690f0aac025becd
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/video/rockchip/lcdc/rk3228_lcdc.c

index 76d3c2952702a8d397e7a544d6f233a1b262d418..67d7a1119c5648a08eb1636652b23b3a2fad72c9 100644 (file)
@@ -559,40 +559,47 @@ static void vop_post_csc_cfg(struct rk_lcdc_driver *dev_drv)
                }
        }
 
+       if (win_csc == COLOR_RGB && overlay_mode == VOP_YUV_DOMAIN)
+               win_csc = COLOR_YCBCR;
+       else if (IS_YUV_COLOR(win_csc) && overlay_mode == VOP_RGB_DOMAIN)
+               win_csc = COLOR_RGB;
+
        val = V_YUV2YUV_POST_Y2R_EN(0) | V_YUV2YUV_POST_EN(0) |
                V_YUV2YUV_POST_R2Y_EN(0);
        /* Y2R */
        if (win_csc == COLOR_YCBCR && output_color == COLOR_YCBCR_BT2020) {
+               win_csc = COLOR_RGB;
                val |= V_YUV2YUV_POST_Y2R_EN(1);
                vop_load_csc_table(vop_dev, POST_YUV2YUV_Y2R_COE,
                                   csc_y2r_bt709_full);
        }
        if (win_csc == COLOR_YCBCR_BT2020 &&
            output_color != COLOR_YCBCR_BT2020) {
+               win_csc = COLOR_RGB_BT2020;
                val |= V_YUV2YUV_POST_Y2R_EN(1);
                vop_load_csc_table(vop_dev, POST_YUV2YUV_Y2R_COE,
                                   csc_y2r_bt2020);
        }
 
        /* R2R */
-       if ((win_csc == COLOR_YCBCR ||
-            win_csc == COLOR_YCBCR_BT709 ||
-            win_csc == COLOR_RGB) && output_color == COLOR_YCBCR_BT2020) {
+       if (win_csc == COLOR_RGB && output_color == COLOR_YCBCR_BT2020) {
+               win_csc = COLOR_RGB_BT2020;
                val |= V_YUV2YUV_POST_EN(1);
                vop_load_csc_table(vop_dev, POST_YUV2YUV_3x3_COE,
                                   csc_r2r_bt709to2020);
        }
-       if (win_csc == COLOR_YCBCR_BT2020 &&
+       if (win_csc == COLOR_RGB_BT2020 &&
            (output_color == COLOR_YCBCR ||
             output_color == COLOR_YCBCR_BT709 ||
             output_color == COLOR_RGB)) {
+               win_csc = COLOR_RGB;
                val |= V_YUV2YUV_POST_EN(1);
                vop_load_csc_table(vop_dev, POST_YUV2YUV_3x3_COE,
                                   csc_r2r_bt2020to709);
        }
 
-       /* Y2R */
-       if (output_color != COLOR_RGB) {
+       /* R2Y */
+       if (!IS_YUV_COLOR(win_csc) && IS_YUV_COLOR(output_color)) {
                val |= V_YUV2YUV_POST_R2Y_EN(1);
 
                if (output_color == COLOR_YCBCR_BT2020)