mirror of https://gitee.com/openkylin/linux.git
drm/i915: fix Haswell FDI link disable path
This covers the "Disable FDI" section from the CRT mode set sequence. This disables the FDI receiver and also the FDI pll. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
049456416f
commit
1ad960f25c
|
@ -1365,6 +1365,32 @@ void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
|
||||||
udelay(600);
|
udelay(600);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void intel_ddi_fdi_disable(struct drm_crtc *crtc)
|
||||||
|
{
|
||||||
|
struct drm_i915_private *dev_priv = crtc->dev->dev_private;
|
||||||
|
struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
|
||||||
|
uint32_t val;
|
||||||
|
|
||||||
|
intel_ddi_post_disable(intel_encoder);
|
||||||
|
|
||||||
|
val = I915_READ(_FDI_RXA_CTL);
|
||||||
|
val &= ~FDI_RX_ENABLE;
|
||||||
|
I915_WRITE(_FDI_RXA_CTL, val);
|
||||||
|
|
||||||
|
val = I915_READ(_FDI_RXA_MISC);
|
||||||
|
val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
|
||||||
|
val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
|
||||||
|
I915_WRITE(_FDI_RXA_MISC, val);
|
||||||
|
|
||||||
|
val = I915_READ(_FDI_RXA_CTL);
|
||||||
|
val &= ~FDI_PCDCLK;
|
||||||
|
I915_WRITE(_FDI_RXA_CTL, val);
|
||||||
|
|
||||||
|
val = I915_READ(_FDI_RXA_CTL);
|
||||||
|
val &= ~FDI_RX_PLL_ENABLE;
|
||||||
|
I915_WRITE(_FDI_RXA_CTL, val);
|
||||||
|
}
|
||||||
|
|
||||||
static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder)
|
static void intel_ddi_hot_plug(struct intel_encoder *intel_encoder)
|
||||||
{
|
{
|
||||||
struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
|
struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
|
||||||
|
|
|
@ -3632,9 +3632,8 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||||
encoder->post_disable(encoder);
|
encoder->post_disable(encoder);
|
||||||
|
|
||||||
if (is_pch_port) {
|
if (is_pch_port) {
|
||||||
ironlake_fdi_disable(crtc);
|
|
||||||
lpt_disable_pch_transcoder(dev_priv);
|
lpt_disable_pch_transcoder(dev_priv);
|
||||||
ironlake_fdi_pll_disable(intel_crtc);
|
intel_ddi_fdi_disable(crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
intel_crtc->active = false;
|
intel_crtc->active = false;
|
||||||
|
|
|
@ -662,6 +662,8 @@ extern bool intel_ddi_pll_mode_set(struct drm_crtc *crtc, int clock);
|
||||||
extern void intel_ddi_put_crtc_pll(struct drm_crtc *crtc);
|
extern void intel_ddi_put_crtc_pll(struct drm_crtc *crtc);
|
||||||
extern void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
|
extern void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
|
||||||
extern void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder);
|
extern void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder);
|
||||||
bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
|
extern bool
|
||||||
|
intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
|
||||||
|
extern void intel_ddi_fdi_disable(struct drm_crtc *crtc);
|
||||||
|
|
||||||
#endif /* __INTEL_DRV_H__ */
|
#endif /* __INTEL_DRV_H__ */
|
||||||
|
|
Loading…
Reference in New Issue