From 14fe7ac1c2089a132dadc3dba7766123e5c39351 Mon Sep 17 00:00:00 2001 From: Aravind Venkateswaran Date: Wed, 15 Mar 2017 15:23:26 -0700 Subject: [PATCH] msm: hdmi: edid: fix parsing of 4K resolution from DTD Detailed Timing Descriptors (DTDs) listed in the EDID data contain the information about the horizontal addressable video pixels for each resolution. The maximum value that can be specified for this field is 4095. In certain instances, a sink may list a resolution with 4096 horizontal addressable video pixels in the DTD by listing a value of 4095. If this value is parsed as is, it can lead to incorrect behavior. Fix this by explicitly updating the value to 4096. CRs-Fixed: 2020154 Change-Id: I035bbef7d245c7cdd75a5bba8719fcca4592d8b7 Signed-off-by: Aravind Venkateswaran --- drivers/video/fbdev/msm/mdss_hdmi_edid.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c index 502bc1570609..37c4be6135aa 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c @@ -1510,6 +1510,17 @@ static void hdmi_edid_detail_desc(struct hdmi_edid_ctrl *edid_ctrl, */ active_h = ((((u32)data_buf[0x4] >> 0x4) & 0xF) << 8) | data_buf[0x2]; + /* + * It is possible that a sink might try to fit in the resolution + * which has an active_h of 4096 into a DTD. However, DTD has only + * 12 bit to represent active_h which would limit the maximum value + * to 4095. If such a case is detected, set the active_h explicitly + * to 4096. + */ + if (active_h == 0xFFF) { + pr_debug("overriding h_active to 4096\n"); + active_h++; + } /* * EDID_TIMING_DESC_H_BLANK[0x3]: Relative Offset to the EDID detailed