Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad283e50 authored by Narender Ankam's avatar Narender Ankam
Browse files

msm: mdss: hdmi: parse extended EDID block map



As part of EDID parser, add support to parse extended EDID
Block Map (0xf0) block and parse all subsequent CEA (0x02)
extended EDID Blocks.

Change-Id: I581efae59dde3abf6f297d5a2519ac0088554b64
Signed-off-by: default avatarNarender Ankam <nankam@codeaurora.org>
parent 10da0194
Loading
Loading
Loading
Loading
+32 −21
Original line number Diff line number Diff line
@@ -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) {
@@ -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 */
@@ -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;
@@ -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++) {