From 97d48ffb530f7695b4be53afbea847d289906dcf Mon Sep 17 00:00:00 2001 From: Sandor Yu Date: Mon, 2 Jul 2018 15:42:39 +0800 Subject: [PATCH] MLK-18726-1: hdmi: Disable GCP when bpp is 24 to pass CTS 7-19 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Refer to HDMI 1.4 section 6.5.3, non-zero CD data GCP should send in deep color mode. Now, when HDMI work in 24bpp, it will send non-zero CD(0x4 for 24bit) data GCP to protocol analyzer. It means current HDMI source is working in “24bit deep color mode”. But HDMI 1.4 CTS 7-19 required DUT should in “No Deep Color support”. Protocol analyzer expect received zero CD GCP or no GCP. Disable GCP when bpp is 24 to pass CTS 7-19. Signed-off-by: Sandor Yu --- drivers/gpu/drm/imx/hdp/imx-hdmi.c | 8 ++++++++ drivers/mxc/hdp/API_HDMITX.c | 10 ++++++++++ drivers/mxc/hdp/API_HDMITX.h | 1 + 3 files changed, 19 insertions(+) diff --git a/drivers/gpu/drm/imx/hdp/imx-hdmi.c b/drivers/gpu/drm/imx/hdp/imx-hdmi.c index 57d987ab320c..514937a23276 100644 --- a/drivers/gpu/drm/imx/hdp/imx-hdmi.c +++ b/drivers/gpu/drm/imx/hdp/imx-hdmi.c @@ -200,6 +200,10 @@ void hdmi_mode_set_ss28fdsoi(state_struct *state, struct drm_display_mode *mode, return; } + /* force GCP CD to 0 when bpp=24 for pass CTS 7-19 */ + if (color_depth == 8) + CDN_API_HDMITX_Disable_GCP(state); + /* Set HDMI TX Mode */ ret = CDN_API_HDMITX_Set_Mode_blocking(state, ptype, character_freq_khz); if (ret != CDN_OK) { @@ -353,6 +357,10 @@ void hdmi_mode_set_t28hpc(state_struct *state, struct drm_display_mode *mode, in return; } + /* force GCP CD to 0 when bpp=24 for pass CTS 7-19 */ + if (color_depth == 8) + CDN_API_HDMITX_Disable_GCP(state); + /* Set HDMI TX Mode */ ret = CDN_API_HDMITX_Set_Mode_blocking(state, ptype, character_freq_khz); if (ret != CDN_OK) { diff --git a/drivers/mxc/hdp/API_HDMITX.c b/drivers/mxc/hdp/API_HDMITX.c index ba9af10f9346..e3c1318591cb 100644 --- a/drivers/mxc/hdp/API_HDMITX.c +++ b/drivers/mxc/hdp/API_HDMITX.c @@ -436,6 +436,16 @@ CDN_API_STATUS CDN_API_HDMITX_SetVic_blocking(state_struct *state, return ret; } +CDN_API_STATUS CDN_API_HDMITX_Disable_GCP(state_struct *state) +{ + GENERAL_Read_Register_response resp; + + CDN_API_General_Read_Register_blocking(state, ADDR_SOURCE_MHL_HD +(HDTX_CONTROLLER<<2), &resp); + resp.val = resp.val & (~F_GCP_EN(1)); + return CDN_API_General_Write_Register_blocking(state, + ADDR_SOURCE_MHL_HD +(HDTX_CONTROLLER<<2), resp.val); +} + CDN_API_STATUS CDN_API_HDMITX_ForceColorDepth_blocking(state_struct *state, u8 force, u8 val) { diff --git a/drivers/mxc/hdp/API_HDMITX.h b/drivers/mxc/hdp/API_HDMITX.h index f4a1aa964677..0f64cc272037 100644 --- a/drivers/mxc/hdp/API_HDMITX.h +++ b/drivers/mxc/hdp/API_HDMITX.h @@ -161,4 +161,5 @@ CDN_API_STATUS CDN_API_HDMITX_ReadEvents_blocking(state_struct *state, CDN_API_STATUS CDN_API_HDMITX_GetHpdStatus(state_struct *state, u8 *hpd_sts); CDN_API_STATUS CDN_API_HDMITX_GetHpdStatus_blocking(state_struct *state, u8 *hpd_sts); +CDN_API_STATUS CDN_API_HDMITX_Disable_GCP(state_struct *state); #endif -- 2.17.1