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:

committed by
Nilaan Gunabalachandran

parent
da5f5ff1ae
commit
2616e57a0a
@@ -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++)
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user