mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 07:24:39 +08:00
drm/atomic: Clean up update_output_state.
With the addition of crtc_state->connector_mask other connectors from different crtc's aren't needed any more to determine if a crtc has connectors, so only call add_affected_connectors on the target crtc. This allows a cleanup to first remove all current connectors, then add all set->connectors to the target crtc. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: http://patchwork.freedesktop.org/patch/msgid/1456303053-28806-2-git-send-email-maarten.lankhorst@linux.intel.com
This commit is contained in:
parent
327097930d
commit
6ab520a2a1
@ -1761,28 +1761,18 @@ static int update_output_state(struct drm_atomic_state *state,
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
int ret, i, j;
|
||||
int ret, i;
|
||||
|
||||
ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
|
||||
state->acquire_ctx);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* First grab all affected connector/crtc states. */
|
||||
for (i = 0; i < set->num_connectors; i++) {
|
||||
conn_state = drm_atomic_get_connector_state(state,
|
||||
set->connectors[i]);
|
||||
if (IS_ERR(conn_state))
|
||||
return PTR_ERR(conn_state);
|
||||
}
|
||||
/* First disable all connectors on the target crtc. */
|
||||
ret = drm_atomic_add_affected_connectors(state, set->crtc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
ret = drm_atomic_add_affected_connectors(state, crtc);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Then recompute connector->crtc links and crtc enabling state. */
|
||||
for_each_connector_in_state(state, connector, conn_state, i) {
|
||||
if (conn_state->crtc == set->crtc) {
|
||||
ret = drm_atomic_set_crtc_for_connector(conn_state,
|
||||
@ -1790,16 +1780,19 @@ static int update_output_state(struct drm_atomic_state *state,
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < set->num_connectors; j++) {
|
||||
if (set->connectors[j] == connector) {
|
||||
ret = drm_atomic_set_crtc_for_connector(conn_state,
|
||||
set->crtc);
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Then set all connectors from set->connectors on the target crtc */
|
||||
for (i = 0; i < set->num_connectors; i++) {
|
||||
conn_state = drm_atomic_get_connector_state(state,
|
||||
set->connectors[i]);
|
||||
if (IS_ERR(conn_state))
|
||||
return PTR_ERR(conn_state);
|
||||
|
||||
ret = drm_atomic_set_crtc_for_connector(conn_state,
|
||||
set->crtc);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
|
Loading…
Reference in New Issue
Block a user