|
@@ -1204,7 +1204,8 @@ static void intel_disable_pch_pll(struct drm_i915_private *dev_priv,
|
|
|
enum pipe pipe)
|
|
|
{
|
|
|
int reg;
|
|
|
- u32 val;
|
|
|
+ u32 val, pll_mask = TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL,
|
|
|
+ pll_sel = TRANSC_DPLL_ENABLE;
|
|
|
|
|
|
if (pipe > 1)
|
|
|
return;
|
|
@@ -1215,6 +1216,15 @@ static void intel_disable_pch_pll(struct drm_i915_private *dev_priv,
|
|
|
/* Make sure transcoder isn't still depending on us */
|
|
|
assert_transcoder_disabled(dev_priv, pipe);
|
|
|
|
|
|
+ if (pipe == 0)
|
|
|
+ pll_sel |= TRANSC_DPLLA_SEL;
|
|
|
+ else if (pipe == 1)
|
|
|
+ pll_sel |= TRANSC_DPLLB_SEL;
|
|
|
+
|
|
|
+
|
|
|
+ if ((I915_READ(PCH_DPLL_SEL) & pll_mask) == pll_sel)
|
|
|
+ return;
|
|
|
+
|
|
|
reg = PCH_DPLL(pipe);
|
|
|
val = I915_READ(reg);
|
|
|
val &= ~DPLL_VCO_ENABLE;
|