Explorar o código

Merge "disp: msm: dp: Update sink sync check to be disabled by default"

qctecmdr %!s(int64=6) %!d(string=hai) anos
pai
achega
8c8fad0d91
Modificáronse 3 ficheiros con 22 adicións e 6 borrados
  1. 10 0
      msm/dp/dp_debug.c
  2. 2 0
      msm/dp/dp_debug.h
  3. 10 6
      msm/dp/dp_display.c

+ 10 - 0
msm/dp/dp_debug.c

@@ -1933,6 +1933,16 @@ static int dp_debug_init(struct dp_debug *dp_debug)
 		goto error_remove_dir;
 	}
 
+	file = debugfs_create_bool("hdcp_wait_sink_sync", 0644, dir,
+			&debug->dp_debug.hdcp_wait_sink_sync);
+
+	if (IS_ERR_OR_NULL(file)) {
+		rc = PTR_ERR(file);
+		pr_err("[%s] debugfs hdcp_wait_sink_sync failed, rc=%d\n",
+		       DEBUG_NAME, rc);
+		goto error_remove_dir;
+	}
+
 	file = debugfs_create_bool("dsc_feature_enable", 0644, dir,
 			&debug->parser->dsc_feature_enable);
 	if (IS_ERR_OR_NULL(file)) {

+ 2 - 0
msm/dp/dp_debug.h

@@ -16,6 +16,7 @@
 /**
  * struct dp_debug
  * @debug_en: specifies whether debug mode enabled
+ * @hdcp_wait_sink_sync: used to wait for sink synchronization before HDCP auth
  * @vdisplay: used to filter out vdisplay value
  * @hdisplay: used to filter out hdisplay value
  * @vrefresh: used to filter out vrefresh value
@@ -28,6 +29,7 @@ struct dp_debug {
 	bool sim_mode;
 	bool psm_enabled;
 	bool hdcp_disabled;
+	bool hdcp_wait_sink_sync;
 	int aspect_ratio;
 	int vdisplay;
 	int hdisplay;

+ 10 - 6
msm/dp/dp_display.c

@@ -324,12 +324,16 @@ static void dp_display_hdcp_cb_work(struct work_struct *work)
 		dp->hdcp_delayed_off = false;
 	}
 
-	drm_dp_dpcd_readb(dp->aux->drm_aux, DP_SINK_STATUS, &sink_status);
-	sink_status &= (DP_RECEIVE_PORT_0_STATUS | DP_RECEIVE_PORT_1_STATUS);
-	if (sink_status < 1) {
-		pr_debug("Sink not synchronized. Queuing again then exiting\n");
-		queue_delayed_work(dp->wq, &dp->hdcp_cb_work, HZ);
-		return;
+	if (dp->debug->hdcp_wait_sink_sync) {
+		drm_dp_dpcd_readb(dp->aux->drm_aux, DP_SINK_STATUS,
+				&sink_status);
+		sink_status &= (DP_RECEIVE_PORT_0_STATUS |
+				DP_RECEIVE_PORT_1_STATUS);
+		if (sink_status < 1) {
+			pr_debug("Sink not synchronized. Queuing again then exiting\n");
+			queue_delayed_work(dp->wq, &dp->hdcp_cb_work, HZ);
+			return;
+		}
 	}
 
 	status = &dp->link->hdcp_status;