|
@@ -196,7 +196,12 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|
|
}
|
|
|
|
|
|
funcs = connector->helper_private;
|
|
|
- new_encoder = funcs->best_encoder(connector);
|
|
|
+
|
|
|
+ if (funcs->atomic_best_encoder)
|
|
|
+ new_encoder = funcs->atomic_best_encoder(connector,
|
|
|
+ connector_state);
|
|
|
+ else
|
|
|
+ new_encoder = funcs->best_encoder(connector);
|
|
|
|
|
|
if (!new_encoder) {
|
|
|
DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
|
|
@@ -229,13 +234,14 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (WARN_ON(!connector_state->crtc))
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
connector_state->best_encoder = new_encoder;
|
|
|
- if (connector_state->crtc) {
|
|
|
- idx = drm_crtc_index(connector_state->crtc);
|
|
|
+ idx = drm_crtc_index(connector_state->crtc);
|
|
|
|
|
|
- crtc_state = state->crtc_states[idx];
|
|
|
- crtc_state->mode_changed = true;
|
|
|
- }
|
|
|
+ crtc_state = state->crtc_states[idx];
|
|
|
+ crtc_state->mode_changed = true;
|
|
|
|
|
|
DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
|
|
|
connector->base.id,
|