Hi 2012/9/6 Daniel Vetter <daniel.vetter at ffwll.ch>: > The cpu eDP encoder has some horrible hacks to set up the DP pll at > the right time. To be able to move them to the right place, add some > more encoder callbacks so that this can happen at the right time. > > LVDS has some similar funky hacks, but that would require more work > (we need to move around the pll setup a bit). Hence for now only > wire these new callbacks up for ilk+ - we only have cpu eDP on these > platforms. > > Signed-Off-by: Daniel Vetter <daniel.vetter at ffwll.ch> I also plan to use these callbacks in the future. Reviewed-by: Paulo Zanoni <paulo.r.zanoni at intel.com> Notice that this patch can not be applied to dinq as-is because of small easy-to-solve conflicts. > --- > drivers/gpu/drm/i915/intel_display.c | 8 ++++++++ > drivers/gpu/drm/i915/intel_drv.h | 2 ++ > 2 files changed, 10 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index bff0936..1d31364 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -3189,6 +3189,10 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc) > assert_fdi_rx_disabled(dev_priv, pipe); > } > > + for_each_encoder_on_crtc(dev, crtc, encoder) > + if (encoder->pre_enable) > + encoder->pre_enable(encoder); > + > /* Enable panel fitting for LVDS */ > if (dev_priv->pch_pf_size && > (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) || HAS_eDP)) { > @@ -3258,6 +3262,10 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc) > I915_WRITE(PF_CTL(pipe), 0); > I915_WRITE(PF_WIN_SZ(pipe), 0); > > + for_each_encoder_on_crtc(dev, crtc, encoder) > + if (encoder->post_disable) > + encoder->post_disable(encoder); > + > ironlake_fdi_disable(crtc); > > intel_disable_transcoder(dev_priv, pipe); > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 4f2b2d6..1306f05 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -153,7 +153,9 @@ struct intel_encoder { > bool connectors_active; > void (*hot_plug)(struct intel_encoder *); > void (*enable)(struct intel_encoder *); > + void (*pre_enable)(struct intel_encoder *); > void (*disable)(struct intel_encoder *); > + void (*post_disable)(struct intel_encoder *); > /* Read out the current hw state of this connector, returning true if > * the encoder is active. If the encoder is enabled it also set the pipe > * it is connected to in the pipe parameter. */ > -- > 1.7.11.2 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Paulo Zanoni