From 7c69b8f0086eaf73e4c798d530402e9a74c52a4b Mon Sep 17 00:00:00 2001 From: Mark Yao Date: Thu, 29 Oct 2015 16:23:14 +0800 Subject: [PATCH] video: lcdc: rk3228: fix colorspace for output YCBCR Change-Id: I192a85c6d60a09c5f9a80b518690f0aac025becd Signed-off-by: Mark Yao --- drivers/video/rockchip/lcdc/rk3228_lcdc.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/video/rockchip/lcdc/rk3228_lcdc.c b/drivers/video/rockchip/lcdc/rk3228_lcdc.c index 76d3c2952702..67d7a1119c56 100644 --- a/drivers/video/rockchip/lcdc/rk3228_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3228_lcdc.c @@ -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) -- 2.34.1