Merge "msm: mdss: hdmi: parse extended EDID block map"

This commit is contained in:
Linux Build Service Account 2019-06-09 00:24:39 -07:00 committed by Gerrit - the friendly Code Review server
commit 1569dc4f6c

View file

@ -2290,6 +2290,7 @@ int hdmi_edid_parser(void *input)
u16 ieee_reg_id; u16 ieee_reg_id;
int status = 0; int status = 0;
u32 i = 0; u32 i = 0;
u32 cea_idx = 1;
struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input; struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input;
if (!edid_ctrl) { if (!edid_ctrl) {
@ -2316,7 +2317,7 @@ int hdmi_edid_parser(void *input)
/* EDID_CEA_EXTENSION_FLAG[0x7E] - CEC extension byte */ /* EDID_CEA_EXTENSION_FLAG[0x7E] - CEC extension byte */
num_of_cea_blocks = edid_buf[EDID_BLOCK_SIZE - 2]; num_of_cea_blocks = edid_buf[EDID_BLOCK_SIZE - 2];
DEV_DBG("%s: No. of CEA blocks is [%u]\n", __func__, DEV_DBG("%s: No. of CEA/Extended EDID blocks is [%u]\n", __func__,
num_of_cea_blocks); num_of_cea_blocks);
/* Find out any CEA extension blocks following block 0 */ /* Find out any CEA extension blocks following block 0 */
@ -2335,17 +2336,26 @@ int hdmi_edid_parser(void *input)
num_of_cea_blocks = MAX_EDID_BLOCKS - 1; num_of_cea_blocks = MAX_EDID_BLOCKS - 1;
} }
if (edid_buf[EDID_BLOCK_SIZE] == 0xF0) {
DEV_DBG("%s: Extended EDID Block Map found\n", __func__);
edid_buf += EDID_BLOCK_SIZE;
cea_idx++;
}
for (i = cea_idx; i <= num_of_cea_blocks; i++) {
/* check for valid CEA block */ /* check for valid CEA block */
if (edid_buf[EDID_BLOCK_SIZE] != 2) { if (edid_buf[EDID_BLOCK_SIZE] != 2) {
DEV_ERR("%s: Invalid CEA block\n", __func__); DEV_ERR("%s: Not a CEA block\n", __func__);
num_of_cea_blocks = 0; edid_buf += EDID_BLOCK_SIZE;
goto bail; continue;
} }
/* goto to CEA extension edid block */ /* goto to CEA extension edid block */
edid_buf += EDID_BLOCK_SIZE; edid_buf += EDID_BLOCK_SIZE;
ieee_reg_id = hdmi_edid_extract_ieee_reg_id(edid_ctrl, edid_buf); ieee_reg_id = hdmi_edid_extract_ieee_reg_id(edid_ctrl,
edid_buf);
DEV_DBG("%s: ieee_reg_id = 0x%08x\n", __func__, ieee_reg_id); DEV_DBG("%s: ieee_reg_id = 0x%08x\n", __func__, ieee_reg_id);
if (ieee_reg_id == EDID_IEEE_REG_ID) if (ieee_reg_id == EDID_IEEE_REG_ID)
edid_ctrl->sink_mode = SINK_MODE_HDMI; edid_ctrl->sink_mode = SINK_MODE_HDMI;
@ -2359,6 +2369,7 @@ int hdmi_edid_parser(void *input)
hdmi_edid_extract_audio_data_blocks(edid_ctrl, edid_buf); hdmi_edid_extract_audio_data_blocks(edid_ctrl, edid_buf);
hdmi_edid_extract_3d_present(edid_ctrl, edid_buf); hdmi_edid_extract_3d_present(edid_ctrl, edid_buf);
hdmi_edid_extract_extended_data_blocks(edid_ctrl, edid_buf); hdmi_edid_extract_extended_data_blocks(edid_ctrl, edid_buf);
}
bail: bail:
for (i = 1; i <= num_of_cea_blocks; i++) { for (i = 1; i <= num_of_cea_blocks; i++) {