From 54cbf709c4fc43f29672b95c4652a9358b6c5c48 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Tue, 18 Aug 2015 14:15:06 +0800 Subject: [PATCH] hdmi:rk3288/rk3368: polling avi status register instead of delay. When sending avi introduced by commit 132ad528d034c38bd9b43bb8f08a5c2910a968c2, we polling avi sending status register until avi is send, instead of delay 100ms. Signed-off-by: Zheng Yang --- .../rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c | 9 ++++++++- .../rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 c1120f78c8cf..e966be1e19f6 100755 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c @@ -1132,6 +1132,9 @@ static void hdmi_dev_config_avi(struct hdmi_dev *hdmi_dev, unsigned char colorimetry, ext_colorimetry, aspect_ratio, y1y0; unsigned char rgb_quan_range = AVI_QUANTIZATION_RANGE_DEFAULT; + hdmi_msk_reg(hdmi_dev, FC_DATAUTO3, m_AVI_AUTO, v_AVI_AUTO(0)); + hdmi_msk_reg(hdmi_dev, IH_FC_STAT1, + m_AVI_INFOFRAME, v_AVI_INFOFRAME(1)); /* Set AVI infoFrame Data byte1 */ if (vpara->color_output == HDMI_COLOR_YCBCR444) y1y0 = AVI_COLOR_MODE_YCBCR444; @@ -1200,6 +1203,7 @@ static void hdmi_dev_config_avi(struct hdmi_dev *hdmi_dev, /* Set AVI infoFrame Data byte5 */ hdmi_msk_reg(hdmi_dev, FC_AVICONF3, m_FC_YQ | m_FC_CN, v_FC_YQ(YQ_LIMITED_RANGE) | v_FC_CN(CN_GRAPHICS)); + hdmi_msk_reg(hdmi_dev, FC_DATAUTO3, m_AVI_AUTO, v_AVI_AUTO(1)); } static int hdmi_dev_config_vsi(struct hdmi *hdmi, @@ -1577,6 +1581,10 @@ static int hdmi_dev_control_output(struct hdmi *hdmi, int enable) vpara.vic = hdmi->vic; vpara.color_output = HDMI_COLOR_RGB_0_255; hdmi_dev_config_avi(hdmi_dev, &vpara); + while ((!hdmi_readl(hdmi_dev, IH_FC_STAT1)) & + m_AVI_INFOFRAME) { + usleep_range(900, 1000); + } } } /* if (enable & HDMI_AUDIO_MUTE) { @@ -1585,7 +1593,6 @@ static int hdmi_dev_control_output(struct hdmi *hdmi, int enable) v_AUD_PACK_SAMPFIT(0x0F)); } */ if (enable == (HDMI_VIDEO_MUTE | HDMI_AUDIO_MUTE)) { - msleep(100); if (hdmi->ops->hdcp_power_off_cb) hdmi->ops->hdcp_power_off_cb(hdmi); rockchip_hdmiv2_powerdown(hdmi_dev); diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.h b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.h index 1c99c078a261..e1c7b6d27e6a 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.h +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.h @@ -118,6 +118,8 @@ enum PHYTYPE { #define m_AVI_INFOFRAME (1 << 1) #define m_GCP (1 << 0) +#define v_AVI_INFOFRAME(n) (((n)&0x01) << 1) + #define IH_FC_STAT2 0x0102 #define m_LOWPRIO_OVERFLOW (1 << 1) #define m_HIGHPRIO_OVERFLOW (1 << 0) -- 2.34.1