hdmi:rk3368/rk3288: set color format in avi to RGB before mute output.
authorZheng Yang <zhengyang@rock-chips.com>
Fri, 10 Jul 2015 03:00:49 +0000 (11:00 +0800)
committerZheng Yang <zhengyang@rock-chips.com>
Fri, 10 Jul 2015 03:00:49 +0000 (11:00 +0800)
        For some sink, it will random recognize YCbCr as RGB when swithing
        hdmi format, picture will covered with purple. If we set color
        fomat in avi to RGB and reset avi to YCbCr, picture will be ok. So
        we set avi to RGB before mute ouput when switching hdmi format.

Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c

index 00793d160c9d224819992da98ac375bd41d7c16f..4106858b6b2d6f53f32300b80be72b43fd3a66ac 100755 (executable)
@@ -1525,21 +1525,29 @@ static int hdmi_dev_config_audio(struct hdmi *hdmi, struct hdmi_audio *audio)
 static int hdmi_dev_control_output(struct hdmi *hdmi, int enable)
 {
        struct hdmi_dev *hdmi_dev = hdmi->property->priv;
+       struct hdmi_video vpara;
 
        HDMIDBG("[%s] %d\n", __func__, enable);
-
        if (enable == HDMI_AV_UNMUTE) {
                hdmi_writel(hdmi_dev, FC_DBGFORCE, 0x00);
-               hdmi_msk_reg(hdmi_dev, FC_GCP,
-                            m_FC_SET_AVMUTE | m_FC_CLR_AVMUTE,
-                            v_FC_SET_AVMUTE(0) | v_FC_CLR_AVMUTE(1));
+               if (hdmi->edid.sink_hdmi == OUTPUT_HDMI)
+                       hdmi_msk_reg(hdmi_dev, FC_GCP,
+                                    m_FC_SET_AVMUTE | m_FC_CLR_AVMUTE,
+                                    v_FC_SET_AVMUTE(0) | v_FC_CLR_AVMUTE(1));
        } else {
                if (enable & HDMI_VIDEO_MUTE) {
                        hdmi_msk_reg(hdmi_dev, FC_DBGFORCE,
                                     m_FC_FORCEVIDEO, v_FC_FORCEVIDEO(1));
-                       hdmi_msk_reg(hdmi_dev, FC_GCP,
-                                    m_FC_SET_AVMUTE | m_FC_CLR_AVMUTE,
-                                    v_FC_SET_AVMUTE(1) | v_FC_CLR_AVMUTE(0));
+                       if (hdmi->edid.sink_hdmi == OUTPUT_HDMI) {
+                               hdmi_msk_reg(hdmi_dev, FC_GCP,
+                                            m_FC_SET_AVMUTE |
+                                            m_FC_CLR_AVMUTE,
+                                            v_FC_SET_AVMUTE(1) |
+                                            v_FC_CLR_AVMUTE(0));
+                               vpara.vic = hdmi->vic;
+                               vpara.color_output = HDMI_COLOR_RGB_0_255;
+                               hdmi_dev_config_avi(hdmi_dev, &vpara);
+                       }
                }
 /*             if (enable & HDMI_AUDIO_MUTE) {
                        hdmi_msk_reg(hdmi_dev, FC_AUDSCONF,