rockchip:hdmi: modify hdmi input color mode according to the vop output domain(RGB...
authorzwl <zwl@rockchips.com>
Fri, 22 Aug 2014 01:01:09 +0000 (09:01 +0800)
committerzwl <zwl@rockchips.com>
Fri, 22 Aug 2014 01:01:09 +0000 (09:01 +0800)
drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c
drivers/video/rockchip/hdmi/rk_hdmi_lcdc.c

index 74d252307325acec89d82babb0c9f3e60a67ae9c..0dc40621f00d0c94fa4f878c0057cfa5e616a8f8 100755 (executable)
@@ -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);
index 497c55d7f5a14f03968537e2e87113c74690805e..16d5dce051e3b0e8ab3333bb74b27c872e5a5cdd 100755 (executable)
@@ -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;