Loading drivers/video/fbdev/msm/mdss_hdmi_edid.c +32 −21 Original line number Diff line number Diff line Loading @@ -2290,6 +2290,7 @@ int hdmi_edid_parser(void *input) u16 ieee_reg_id; int status = 0; u32 i = 0; u32 cea_idx = 1; struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input; if (!edid_ctrl) { Loading @@ -2316,7 +2317,7 @@ int hdmi_edid_parser(void *input) /* EDID_CEA_EXTENSION_FLAG[0x7E] - CEC extension byte */ 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); /* Find out any CEA extension blocks following block 0 */ Loading @@ -2335,17 +2336,26 @@ int hdmi_edid_parser(void *input) 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 */ if (edid_buf[EDID_BLOCK_SIZE] != 2) { DEV_ERR("%s: Invalid CEA block\n", __func__); num_of_cea_blocks = 0; goto bail; DEV_ERR("%s: Not a CEA block\n", __func__); edid_buf += EDID_BLOCK_SIZE; continue; } /* goto to CEA extension edid block */ 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); if (ieee_reg_id == EDID_IEEE_REG_ID) edid_ctrl->sink_mode = SINK_MODE_HDMI; Loading @@ -2359,6 +2369,7 @@ int hdmi_edid_parser(void *input) hdmi_edid_extract_audio_data_blocks(edid_ctrl, edid_buf); hdmi_edid_extract_3d_present(edid_ctrl, edid_buf); hdmi_edid_extract_extended_data_blocks(edid_ctrl, edid_buf); } bail: for (i = 1; i <= num_of_cea_blocks; i++) { Loading Loading
drivers/video/fbdev/msm/mdss_hdmi_edid.c +32 −21 Original line number Diff line number Diff line Loading @@ -2290,6 +2290,7 @@ int hdmi_edid_parser(void *input) u16 ieee_reg_id; int status = 0; u32 i = 0; u32 cea_idx = 1; struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input; if (!edid_ctrl) { Loading @@ -2316,7 +2317,7 @@ int hdmi_edid_parser(void *input) /* EDID_CEA_EXTENSION_FLAG[0x7E] - CEC extension byte */ 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); /* Find out any CEA extension blocks following block 0 */ Loading @@ -2335,17 +2336,26 @@ int hdmi_edid_parser(void *input) 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 */ if (edid_buf[EDID_BLOCK_SIZE] != 2) { DEV_ERR("%s: Invalid CEA block\n", __func__); num_of_cea_blocks = 0; goto bail; DEV_ERR("%s: Not a CEA block\n", __func__); edid_buf += EDID_BLOCK_SIZE; continue; } /* goto to CEA extension edid block */ 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); if (ieee_reg_id == EDID_IEEE_REG_ID) edid_ctrl->sink_mode = SINK_MODE_HDMI; Loading @@ -2359,6 +2369,7 @@ int hdmi_edid_parser(void *input) hdmi_edid_extract_audio_data_blocks(edid_ctrl, edid_buf); hdmi_edid_extract_3d_present(edid_ctrl, edid_buf); hdmi_edid_extract_extended_data_blocks(edid_ctrl, edid_buf); } bail: for (i = 1; i <= num_of_cea_blocks; i++) { Loading