|
@@ -492,17 +492,23 @@ intel_ddi_get_crtc_encoder(struct drm_crtc *crtc)
|
|
|
}
|
|
|
|
|
|
static struct intel_encoder *
|
|
|
-intel_ddi_get_crtc_new_encoder(struct intel_crtc *crtc)
|
|
|
+intel_ddi_get_crtc_new_encoder(struct intel_crtc_state *crtc_state)
|
|
|
{
|
|
|
- struct drm_device *dev = crtc->base.dev;
|
|
|
- struct intel_encoder *intel_encoder, *ret = NULL;
|
|
|
+ struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
|
|
|
+ struct intel_encoder *ret = NULL;
|
|
|
+ struct drm_atomic_state *state;
|
|
|
int num_encoders = 0;
|
|
|
+ int i;
|
|
|
|
|
|
- for_each_intel_encoder(dev, intel_encoder) {
|
|
|
- if (intel_encoder->new_crtc == crtc) {
|
|
|
- ret = intel_encoder;
|
|
|
- num_encoders++;
|
|
|
- }
|
|
|
+ state = crtc_state->base.state;
|
|
|
+
|
|
|
+ for (i = 0; i < state->num_connector; i++) {
|
|
|
+ if (!state->connectors[i] ||
|
|
|
+ state->connector_states[i]->crtc != crtc_state->base.crtc)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ ret = to_intel_encoder(state->connector_states[i]->best_encoder);
|
|
|
+ num_encoders++;
|
|
|
}
|
|
|
|
|
|
WARN(num_encoders != 1, "%d encoders on crtc for pipe %c\n", num_encoders,
|
|
@@ -1216,7 +1222,7 @@ bool intel_ddi_pll_select(struct intel_crtc *intel_crtc,
|
|
|
{
|
|
|
struct drm_device *dev = intel_crtc->base.dev;
|
|
|
struct intel_encoder *intel_encoder =
|
|
|
- intel_ddi_get_crtc_new_encoder(intel_crtc);
|
|
|
+ intel_ddi_get_crtc_new_encoder(crtc_state);
|
|
|
int clock = crtc_state->port_clock;
|
|
|
|
|
|
if (IS_SKYLAKE(dev))
|