Browse Source

Merge "disp: msm: use iterator APIs to walk the connector list"

qctecmdr 5 years ago
parent
commit
da7839e18e
3 changed files with 33 additions and 21 deletions
  1. 12 8
      msm/dsi/dsi_display.c
  2. 10 6
      msm/sde/sde_encoder.c
  3. 11 7
      msm/sde/sde_rm.c

+ 12 - 8
msm/dsi/dsi_display.c

@@ -5466,10 +5466,11 @@ static struct dsi_display_ext_bridge *dsi_display_ext_get_bridge(
 {
 	struct msm_drm_private *priv;
 	struct sde_kms *sde_kms;
-	struct list_head *connector_list;
-	struct drm_connector *conn_iter;
+	struct drm_connector *conn;
+	struct drm_connector_list_iter conn_iter;
 	struct sde_connector *sde_conn;
 	struct dsi_display *display;
+	struct dsi_display_ext_bridge *dsi_bridge = NULL;
 	int i;
 
 	if (!bridge || !bridge->encoder) {
@@ -5479,20 +5480,23 @@ static struct dsi_display_ext_bridge *dsi_display_ext_get_bridge(
 
 	priv = bridge->dev->dev_private;
 	sde_kms = to_sde_kms(priv->kms);
-	connector_list = &sde_kms->dev->mode_config.connector_list;
 
-	list_for_each_entry(conn_iter, connector_list, head) {
-		sde_conn = to_sde_connector(conn_iter);
+	drm_connector_list_iter_begin(sde_kms->dev, &conn_iter);
+	drm_for_each_connector_iter(conn, &conn_iter) {
+		sde_conn = to_sde_connector(conn);
 		if (sde_conn->encoder == bridge->encoder) {
 			display = sde_conn->display;
 			display_for_each_ctrl(i, display) {
-				if (display->ext_bridge[i].bridge == bridge)
-					return &display->ext_bridge[i];
+				if (display->ext_bridge[i].bridge == bridge) {
+					dsi_bridge = &display->ext_bridge[i];
+					break;
+				}
 			}
 		}
 	}
+	drm_connector_list_iter_end(&conn_iter);
 
-	return NULL;
+	return dsi_bridge;
 }
 
 static void dsi_display_drm_ext_adjust_timing(

+ 10 - 6
msm/sde/sde_encoder.c

@@ -2037,8 +2037,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 	struct sde_encoder_virt *sde_enc;
 	struct msm_drm_private *priv;
 	struct sde_kms *sde_kms;
-	struct list_head *connector_list;
-	struct drm_connector *conn = NULL, *conn_iter;
+	struct drm_connector_list_iter conn_iter;
+	struct drm_connector *conn = NULL, *conn_search;
 	struct sde_rm_hw_iter dsc_iter, pp_iter, qdss_iter;
 	struct sde_rm_hw_request request_hw;
 	enum sde_intf_mode intf_mode;
@@ -2063,7 +2063,6 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 
 	priv = drm_enc->dev->dev_private;
 	sde_kms = to_sde_kms(priv->kms);
-	connector_list = &sde_kms->dev->mode_config.connector_list;
 
 	SDE_EVT32(DRMID(drm_enc));
 
@@ -2077,9 +2076,14 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc,
 	}
 	sde_enc->crtc = drm_enc->crtc;
 
-	list_for_each_entry(conn_iter, connector_list, head)
-		if (conn_iter->encoder == drm_enc)
-			conn = conn_iter;
+	drm_connector_list_iter_begin(sde_kms->dev, &conn_iter);
+	drm_for_each_connector_iter(conn_search, &conn_iter) {
+		if (conn_search->encoder == drm_enc) {
+			conn = conn_search;
+			break;
+		}
+	}
+	drm_connector_list_iter_end(&conn_iter);
 
 	if (!conn) {
 		SDE_ERROR_ENC(sde_enc, "failed to find attached connector\n");

+ 11 - 7
msm/sde/sde_rm.c

@@ -1886,15 +1886,19 @@ static struct sde_rm_rsvp *_sde_rm_get_rsvp_nxt(
 static struct drm_connector *_sde_rm_get_connector(
 		struct drm_encoder *enc)
 {
-	struct drm_connector *conn = NULL;
-	struct list_head *connector_list =
-			&enc->dev->mode_config.connector_list;
+	struct drm_connector *conn = NULL, *conn_search;
+	struct drm_connector_list_iter conn_iter;
 
-	list_for_each_entry(conn, connector_list, head)
-		if (conn->encoder == enc)
-			return conn;
+	drm_connector_list_iter_begin(enc->dev, &conn_iter);
+	drm_for_each_connector_iter(conn_search, &conn_iter) {
+		if (conn_search->encoder == enc) {
+			conn = conn_search;
+			break;
+		}
+	}
+	drm_connector_list_iter_end(&conn_iter);
 
-	return NULL;
+	return conn;
 }
 
 int sde_rm_update_topology(struct drm_connector_state *conn_state,