MLK-18726-1: hdmi: Disable GCP when bpp is 24 to pass CTS 7-19
authorSandor Yu <Sandor.yu@nxp.com>
Mon, 2 Jul 2018 07:42:39 +0000 (15:42 +0800)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
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 <Sandor.yu@nxp.com>
drivers/gpu/drm/imx/hdp/imx-hdmi.c
drivers/mxc/hdp/API_HDMITX.c
drivers/mxc/hdp/API_HDMITX.h

index 57d987a..514937a 100644 (file)
@@ -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) {
index ba9af10..e3c1318 100644 (file)
@@ -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)
 {
index f4a1aa9..0f64cc2 100644 (file)
@@ -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