From 132ad528d034c38bd9b43bb8f08a5c2910a968c2 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Fri, 10 Jul 2015 11:00:49 +0800 Subject: [PATCH] hdmi:rk3368/rk3288: set color format in avi to RGB before mute output. 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 --- .../hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c index 00793d160c9d..4106858b6b2d 100755 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c @@ -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, -- 2.34.1