rk3036 hdmi: fix hdmi display error when TV power down and power up
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / hdmi / rk_hdmi_lcdc.c
index 497c55d7f5a14f03968537e2e87113c74690805e..f41a73a19fabebf9060cf998fc55229fd58f667b 100755 (executable)
@@ -106,6 +106,7 @@ int hdmi_set_info(struct rk_screen *screen, unsigned int vic)
        /* screen type & face */
        screen->type = OUT_TYPE;
        screen->face = OUT_FACE;
+       screen->color_mode = COLOR_YCBCR;
 
        /* Screen size */
        screen->mode.xres = hdmi_mode[i].xres;
@@ -569,10 +570,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_color == COLOR_RGB)
+               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;