Просмотр исходного кода

Merge "disp: msm: hdcp: reset authentication state for client initiated abort"

qctecmdr 5 лет назад
Родитель
Сommit
50e358b5e5
2 измененных файлов с 11 добавлено и 3 удалено
  1. 6 2
      msm/dp/dp_display.c
  2. 5 1
      msm/sde_hdcp_1x.c

+ 6 - 2
msm/dp/dp_display.c

@@ -2324,9 +2324,13 @@ static int dp_display_unprepare(struct dp_display *dp_display, void *panel)
 	 * Check if the power off sequence was triggered
 	 * by a source initialated action like framework
 	 * reboot or suspend-resume but not from normal
-	 * hot plug.
+	 * hot plug. If connector is in MST mode, skip
+	 * powering down host as aux needs to be kept
+	 * alive to handle hot-plug sideband message.
 	 */
-	if (dp_display_is_ready(dp))
+	if (dp_display_is_ready(dp) &&
+		(dp_display_state_is(DP_STATE_SUSPENDED) ||
+		!dp->mst.mst_active))
 		flags |= DP_PANEL_SRC_INITIATED_POWER_DOWN;
 
 	if (dp->active_stream_cnt)

+ 5 - 1
msm/sde_hdcp_1x.c

@@ -1057,8 +1057,10 @@ static void sde_hdcp_1x_auth_work(struct work_struct *work)
 		return;
 	}
 
-	if (atomic_read(&hdcp->abort))
+	if (atomic_read(&hdcp->abort)) {
+		rc = -EINVAL;
 		goto end;
+	}
 
 	hdcp->sink_r0_ready = false;
 	hdcp->reauth = false;
@@ -1495,6 +1497,8 @@ static void sde_hdcp_1x_abort(void *data, bool abort)
 	atomic_set(&hdcp->abort, abort);
 	cancel_delayed_work_sync(&hdcp->hdcp_auth_work);
 	flush_workqueue(hdcp->workq);
+	if (sde_hdcp_1x_state(HDCP_STATE_AUTHENTICATING))
+		hdcp->hdcp_state = HDCP_STATE_AUTH_FAIL;
 }
 
 void *sde_hdcp_1x_init(struct sde_hdcp_init_data *init_data)