aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c26
-rw-r--r--drivers/gpu/drm/i915/intel_display.c3
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h4
3 files changed, 30 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 00958399dcfe..58f50ebdbef6 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1365,6 +1365,32 @@ void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
1365 udelay(600); 1365 udelay(600);
1366} 1366}
1367 1367
1368void intel_ddi_fdi_disable(struct drm_crtc *crtc)
1369{
1370 struct drm_i915_private *dev_priv = crtc->dev->dev_private;
1371 struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1372 uint32_t val;
1373
1374 intel_ddi_post_disable(intel_encoder);
1375
1376 val = I915_READ(_FDI_RXA_CTL);
1377 val &= ~FDI_RX_ENABLE;
1378 I915_WRITE(_FDI_RXA_CTL, val);
1379
1380 val = I915_READ(_FDI_RXA_MISC);
1381 val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
1382 val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
1383 I915_WRITE(_FDI_RXA_MISC, val);
1384
1385 val = I915_READ(_FDI_RXA_CTL);
1386 val &= ~FDI_PCDCLK;
1387 I915_WRITE(_FDI_RXA_CTL, val);
1388
1389 val = I915_READ(_FDI_RXA_CTL);
1390 val &= ~FDI_RX_PLL_ENABLE;
1391 I915_WRITE(_FDI_RXA_CTL, val);
1392}
1393
1368static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder) 1394static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder)
1369{ 1395{
1370 struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base); 1396 struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 417fb4a642e9..eeab3ae780cc 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3632,9 +3632,8 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
3632 encoder->post_disable(encoder); 3632 encoder->post_disable(encoder);
3633 3633
3634 if (is_pch_port) { 3634 if (is_pch_port) {
3635 ironlake_fdi_disable(crtc);
3636 lpt_disable_pch_transcoder(dev_priv); 3635 lpt_disable_pch_transcoder(dev_priv);
3637 ironlake_fdi_pll_disable(intel_crtc); 3636 intel_ddi_fdi_disable(crtc);
3638 } 3637 }
3639 3638
3640 intel_crtc->active = false; 3639 intel_crtc->active = false;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 08238ef92b40..bcc52412810f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -662,6 +662,8 @@ extern bool intel_ddi_pll_mode_set(struct drm_crtc *crtc, int clock);
662extern void intel_ddi_put_crtc_pll(struct drm_crtc *crtc); 662extern void intel_ddi_put_crtc_pll(struct drm_crtc *crtc);
663extern void intel_ddi_set_pipe_settings(struct drm_crtc *crtc); 663extern void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
664extern void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder); 664extern void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder);
665bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector); 665extern bool
666intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
667extern void intel_ddi_fdi_disable(struct drm_crtc *crtc);
666 668
667#endif /* __INTEL_DRV_H__ */ 669#endif /* __INTEL_DRV_H__ */