intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF);
 }
 
+
+static void hsw_crt_post_disable(struct intel_encoder *encoder)
+{
+       struct drm_device *dev = encoder->base.dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       uint32_t val;
+
+       DRM_DEBUG_KMS("Disabling SPLL\n");
+       val = I915_READ(SPLL_CTL);
+       WARN_ON(!(val & SPLL_PLL_ENABLE));
+       I915_WRITE(SPLL_CTL, val & ~SPLL_PLL_ENABLE);
+       POSTING_READ(SPLL_CTL);
+}
+
 static void intel_enable_crt(struct intel_encoder *encoder)
 {
        struct intel_crt *crt = intel_encoder_to_crt(encoder);
                crt->base.get_config = hsw_crt_get_config;
                crt->base.get_hw_state = intel_ddi_get_hw_state;
                crt->base.pre_enable = hsw_crt_pre_enable;
+               crt->base.post_disable = hsw_crt_post_disable;
        } else {
                crt->base.get_config = intel_crt_get_config;
                crt->base.get_hw_state = intel_crt_get_hw_state;
 
        uint32_t val;
 
        switch (intel_crtc->ddi_pll_sel) {
-       case PORT_CLK_SEL_SPLL:
-               DRM_DEBUG_KMS("Disabling SPLL\n");
-               val = I915_READ(SPLL_CTL);
-               WARN_ON(!(val & SPLL_PLL_ENABLE));
-               I915_WRITE(SPLL_CTL, val & ~SPLL_PLL_ENABLE);
-               POSTING_READ(SPLL_CTL);
-               break;
        case PORT_CLK_SEL_WRPLL1:
                plls->wrpll1_refcount--;
                if (plls->wrpll1_refcount == 0) {