From 5ca6692f0be8b37e5178ea26fcab64e9c5cdc297 Mon Sep 17 00:00:00 2001 From: zwl Date: Fri, 22 Aug 2014 09:01:09 +0800 Subject: [PATCH] rockchip:hdmi: modify hdmi input color mode according to the vop output domain(RGB/YUV) --- .../rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c | 9 +++++++-- drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c b/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c index 74d252307325..0dc40621f00d 100755 --- a/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c +++ b/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c @@ -287,8 +287,13 @@ static int rk3036_hdmi_config_video(struct hdmi *hdmi_drv, if (hdmi_drv->data->soc_type == HDMI_SOC_RK3036) { vpara->input_color = VIDEO_INPUT_COLOR_RGB; vpara->output_color = VIDEO_OUTPUT_RGB444;/*rk3036 vop only can output rgb fmt*/ - } else if (hdmi_drv->data->soc_type == HDMI_SOC_RK312X) - vpara->input_color = VIDEO_INPUT_COLOR_YCBCR444;/*rk3128 vop can output yuv444 fmt*/ + } else if (hdmi_drv->data->soc_type == HDMI_SOC_RK312X) { + /* rk3128 vop can output yuv444 fmt */ + if (vpara->input_color == VIDEO_INPUT_COLOR_YCBCR444) + vpara->output_color = VIDEO_OUTPUT_YCBCR444; + else + vpara->output_color = VIDEO_OUTPUT_RGB444; + } if (hdmi_drv->pwr_mode == LOWER_PWR) rk3036_hdmi_set_pwr_mode(hdmi_drv, NORMAL); diff --git a/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c b/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c index 497c55d7f5a1..16d5dce051e3 100755 --- a/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c +++ b/drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c @@ -569,10 +569,24 @@ int hdmi_switch_fb(struct hdmi *hdmi, int vic) */ int hdmi_init_video_para(struct hdmi *hdmi_drv, struct hdmi_video_para *video) { + struct rk_lcdc_driver *lcdc_drv = NULL; + + if (unlikely(hdmi_drv == NULL)) + return -1; + + lcdc_drv = hdmi_drv->lcdc; + if (unlikely(lcdc_drv == NULL)) + return -1; + memset(video, 0, sizeof(struct hdmi_video_para)); + video->vic = hdmi_drv->vic; video->input_mode = VIDEO_INPUT_RGB_YCBCR_444; - video->input_color = VIDEO_INPUT_COLOR_RGB; + if (lcdc_drv->output_domain == OUTPUT_RGB_DOMAIN) + video->input_color = VIDEO_INPUT_COLOR_RGB; + else + video->input_color = VIDEO_INPUT_COLOR_YCBCR444; + video->output_mode = hdmi_drv->edid.sink_hdmi; video->format_3d = 0; /* TODO modify according to EDID if need */ video->pixel_repet = 0; -- 2.34.1