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

Commit f2aecea1 authored by Ajay Singh Parmar's avatar Ajay Singh Parmar Committed by Sandeep Panda
Browse files

msm: mdss: hdmi: clear ddc line before starting hdcp



Clear DDC line if scrambling and Rx status polling is still
going on. Check for all scrambling and Rx status errors and
stop polling in error cases. This needs to be done before
new hdcp authentication session is started to avoid any
authentication failures because of ddc line being busy.

Change-Id: I90957410172ca206d435a5549d689ada222f84db
Signed-off-by: default avatarAjay Singh Parmar <aparmar@codeaurora.org>
parent c5b91e20
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -372,7 +372,6 @@ static int hdmi_hdcp_authentication_part1(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = 1;
	ddc_data.retry = 5;
	ddc_data.what = "Bcaps";
	ddc_data.no_align = true;

	hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

@@ -574,7 +573,6 @@ static int hdmi_hdcp_authentication_part1(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = 5;
	ddc_data.retry = 5;
	ddc_data.what = "Bksv";
	ddc_data.no_align = true;

	hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

@@ -649,7 +647,6 @@ static int hdmi_hdcp_authentication_part1(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = 2;
	ddc_data.retry = 5;
	ddc_data.what = "R0'";
	ddc_data.no_align = true;

	hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

@@ -758,7 +755,6 @@ static int hdmi_hdcp_transfer_v_h(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = 4;
	ddc_data.retry = 5;
	ddc_data.what = what;
	ddc_data.no_align = true;

	if (hdcp_ctrl->tz_hdcp) {
		memset(scm_buf, 0x00, sizeof(scm_buf));
@@ -888,7 +884,7 @@ static int hdmi_hdcp_authentication_part2(struct hdmi_hdcp_ctrl *hdcp_ctrl)
		ddc_data.request_len = 1;
		ddc_data.retry = 5;
		ddc_data.what = "Bcaps";
		ddc_data.no_align = false;
		ddc_data.retry_align = true;

		hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

@@ -910,7 +906,7 @@ static int hdmi_hdcp_authentication_part2(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = 2;
	ddc_data.retry = 5;
	ddc_data.what = "Bstatuss";
	ddc_data.no_align = false;
	ddc_data.retry_align = true;

	hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

@@ -1005,7 +1001,6 @@ static int hdmi_hdcp_authentication_part2(struct hdmi_hdcp_ctrl *hdcp_ctrl)
	ddc_data.request_len = ksv_bytes;
	ddc_data.retry = 5;
	ddc_data.what = "KSV FIFO";
	ddc_data.no_align = true;

	hdcp_ctrl->init_data.ddc_ctrl->ddc_data = ddc_data;

+5 −2
Original line number Diff line number Diff line
@@ -233,6 +233,10 @@ static int hdmi_hdcp2p2_authenticate(void *input)
	ctrl->sink_status = SINK_CONNECTED;
	atomic_set(&ctrl->auth_state, HDCP_STATE_AUTHENTICATING);

	/* make sure ddc is idle before starting hdcp 2.2 authentication */
	hdmi_scrambler_ddc_disable(ctrl->init_data.ddc_ctrl);
	hdmi_hdcp2p2_ddc_disable(ctrl->init_data.ddc_ctrl);

	cdata.context = input;
	hdmi_hdcp2p2_wakeup(&cdata);

@@ -431,7 +435,6 @@ static int hdmi_hdcp2p2_ddc_write_message(struct hdmi_hdcp2p2_ctrl *ctrl,
	ddc_data.offset = HDCP_SINK_DDC_HDCP2_WRITE_MESSAGE;
	ddc_data.data_buf = buf;
	ddc_data.data_len = size;
	ddc_data.retry = 1;
	ddc_data.hard_timeout = ctrl->timeout;
	ddc_data.what = "HDCP2WriteMessage";

@@ -800,7 +803,7 @@ static void hdmi_hdcp2p2_link_work(struct kthread_work *work)
		goto exit;
	}

	rc = hdmi_ddc_check_status(ddc_ctrl);
	rc = hdmi_hdcp2p2_ddc_check_status(ddc_ctrl);
	if (rc) {
		cdata.cmd = HDCP_LIB_WKUP_CMD_STOP;
		goto exit;
+1 −1
Original line number Diff line number Diff line
@@ -1394,7 +1394,7 @@ static u32 hdmi_tx_ddc_read(struct hdmi_tx_ddc_ctrl *ddc_ctrl,
			ddc_data.request_len = block_size;
			ddc_data.retry       = 1;
			ddc_data.what        = "EDID";
			ddc_data.no_align    = false;
			ddc_data.retry_align = true;

			ddc_ctrl->ddc_data = ddc_data;