disp: msm: encoder_ids replaced in drm_connector

Commit 62afb4ad425a ("drm/connector: Allow max possible encoders
to attach to a connector") enables additional encoders per
connector through use of a mask rather than encoder ids.
This change updates the driver when looking for an encoder
for the connector to look through the list of all possible encoders.

Change-Id: I69cc7c38cd0a9842ed2f15712feeb3c6b88daadf
Signed-off-by: Samantha Tran <samtran@codeaurora.org>
Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
This commit is contained in:
Samantha Tran
2020-07-31 09:39:13 -07:00
committed by Nilaan Gunabalachandran
parent da5f5ff1ae
commit 2616e57a0a
3 changed files with 37 additions and 6 deletions

View File

@@ -2078,8 +2078,7 @@ dp_mst_add_fixed_connector(struct drm_dp_mst_topology_mgr *mgr,
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
/* clear encoder list */ /* clear encoder list */
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) connector->possible_encoders = 0;
connector->encoder_ids[i] = 0;
/* re-attach encoders from first available encoders */ /* re-attach encoders from first available encoders */
for (i = enc_idx; i < MAX_DP_MST_DRM_BRIDGES; i++) for (i = enc_idx; i < MAX_DP_MST_DRM_BRIDGES; i++)

View File

@@ -6379,6 +6379,7 @@ int dsi_display_drm_ext_bridge_init(struct dsi_display *display,
for (i = 0; i < display->ext_bridge_cnt; i++) { for (i = 0; i < display->ext_bridge_cnt; i++) {
struct dsi_display_ext_bridge *ext_bridge_info = struct dsi_display_ext_bridge *ext_bridge_info =
&display->ext_bridge[i]; &display->ext_bridge[i];
struct drm_encoder *c_encoder;
/* return if ext bridge is already initialized */ /* return if ext bridge is already initialized */
if (ext_bridge_info->bridge) if (ext_bridge_info->bridge)
@@ -6424,8 +6425,20 @@ int dsi_display_drm_ext_bridge_init(struct dsi_display *display,
spin_lock_irq(&drm->mode_config.connector_list_lock); spin_lock_irq(&drm->mode_config.connector_list_lock);
ext_conn = list_last_entry(&drm->mode_config.connector_list, ext_conn = list_last_entry(&drm->mode_config.connector_list,
struct drm_connector, head); struct drm_connector, head);
drm_connector_for_each_possible_encoder(ext_conn, c_encoder)
break;
if (!c_encoder) {
DSI_ERR("failed to get encoder\n");
rc = PTR_ERR(c_encoder);
spin_unlock_irq(&drm->mode_config.connector_list_lock);
goto error;
}
if (ext_conn && ext_conn != connector && if (ext_conn && ext_conn != connector &&
ext_conn->encoder_ids[0] == bridge->encoder->base.id) { c_encoder->base.id == bridge->encoder->base.id) {
list_del_init(&ext_conn->head); list_del_init(&ext_conn->head);
display->ext_conn = ext_conn; display->ext_conn = ext_conn;
} }

View File

@@ -2990,6 +2990,16 @@ static int sde_kms_inform_cont_splash_res_disable(struct msm_kms *kms,
drm_connector_list_iter_begin(dev, &conn_iter); drm_connector_list_iter_begin(dev, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) { drm_for_each_connector_iter(connector, &conn_iter) {
struct drm_encoder *c_encoder;
drm_connector_for_each_possible_encoder(connector,
c_encoder)
break;
if (!c_encoder) {
SDE_ERROR("c_encoder not found\n");
return -EINVAL;
}
/** /**
* Inform cont_splash is disabled to each interface/connector. * Inform cont_splash is disabled to each interface/connector.
* This is currently supported for DSI interface. * This is currently supported for DSI interface.
@@ -2999,8 +3009,7 @@ static int sde_kms_inform_cont_splash_res_disable(struct msm_kms *kms,
if (!dsi_display || !encoder) { if (!dsi_display || !encoder) {
sde_conn->ops.cont_splash_res_disable sde_conn->ops.cont_splash_res_disable
(sde_conn->display); (sde_conn->display);
} else if (connector->encoder_ids[0] } else if (c_encoder->base.id == encoder->base.id) {
== encoder->base.id) {
/** /**
* This handles dual DSI * This handles dual DSI
* configuration where one DSI * configuration where one DSI
@@ -3183,6 +3192,16 @@ static int sde_kms_cont_splash_config(struct msm_kms *kms,
mutex_lock(&dev->mode_config.mutex); mutex_lock(&dev->mode_config.mutex);
drm_connector_list_iter_begin(dev, &conn_iter); drm_connector_list_iter_begin(dev, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) { drm_for_each_connector_iter(connector, &conn_iter) {
struct drm_encoder *c_encoder;
drm_connector_for_each_possible_encoder(connector,
c_encoder)
break;
if (!c_encoder) {
SDE_ERROR("c_encoder not found\n");
mutex_unlock(&dev->mode_config.mutex);
return -EINVAL;
}
/** /**
* SDE_KMS doesn't attach more than one encoder to * SDE_KMS doesn't attach more than one encoder to
* a DSI connector. So it is safe to check only with * a DSI connector. So it is safe to check only with
@@ -3190,7 +3209,7 @@ static int sde_kms_cont_splash_config(struct msm_kms *kms,
* ever have to support continuous splash for * ever have to support continuous splash for
* external displays in MST configuration. * external displays in MST configuration.
*/ */
if (connector->encoder_ids[0] == encoder->base.id) if (c_encoder->base.id == encoder->base.id)
break; break;
} }
drm_connector_list_iter_end(&conn_iter); drm_connector_list_iter_end(&conn_iter);