drm/i915: set TV detection mode when tv is already connected
We used load_detect_temp flag to determine whether to set tv to the test mode. However if the TV already has a mode set, we still need to set the test mode to determine connection. This results in blinking, but there is no other reliable way to determine TV connection. freedesktop.org bug #22035 Signed-off-by: Ma Ling <ling.ma@intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
921809a583
commit
8ed9a5bc9c
|
@ -1383,34 +1383,31 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output)
|
|||
/*
|
||||
* Detect TV by polling)
|
||||
*/
|
||||
if (intel_output->load_detect_temp) {
|
||||
/* TV not currently running, prod it with destructive detect */
|
||||
save_tv_dac = tv_dac;
|
||||
tv_ctl = I915_READ(TV_CTL);
|
||||
save_tv_ctl = tv_ctl;
|
||||
tv_ctl &= ~TV_ENC_ENABLE;
|
||||
tv_ctl &= ~TV_TEST_MODE_MASK;
|
||||
tv_ctl |= TV_TEST_MODE_MONITOR_DETECT;
|
||||
tv_dac &= ~TVDAC_SENSE_MASK;
|
||||
tv_dac &= ~DAC_A_MASK;
|
||||
tv_dac &= ~DAC_B_MASK;
|
||||
tv_dac &= ~DAC_C_MASK;
|
||||
tv_dac |= (TVDAC_STATE_CHG_EN |
|
||||
TVDAC_A_SENSE_CTL |
|
||||
TVDAC_B_SENSE_CTL |
|
||||
TVDAC_C_SENSE_CTL |
|
||||
DAC_CTL_OVERRIDE |
|
||||
DAC_A_0_7_V |
|
||||
DAC_B_0_7_V |
|
||||
DAC_C_0_7_V);
|
||||
I915_WRITE(TV_CTL, tv_ctl);
|
||||
I915_WRITE(TV_DAC, tv_dac);
|
||||
intel_wait_for_vblank(dev);
|
||||
tv_dac = I915_READ(TV_DAC);
|
||||
I915_WRITE(TV_DAC, save_tv_dac);
|
||||
I915_WRITE(TV_CTL, save_tv_ctl);
|
||||
intel_wait_for_vblank(dev);
|
||||
}
|
||||
save_tv_dac = tv_dac;
|
||||
tv_ctl = I915_READ(TV_CTL);
|
||||
save_tv_ctl = tv_ctl;
|
||||
tv_ctl &= ~TV_ENC_ENABLE;
|
||||
tv_ctl &= ~TV_TEST_MODE_MASK;
|
||||
tv_ctl |= TV_TEST_MODE_MONITOR_DETECT;
|
||||
tv_dac &= ~TVDAC_SENSE_MASK;
|
||||
tv_dac &= ~DAC_A_MASK;
|
||||
tv_dac &= ~DAC_B_MASK;
|
||||
tv_dac &= ~DAC_C_MASK;
|
||||
tv_dac |= (TVDAC_STATE_CHG_EN |
|
||||
TVDAC_A_SENSE_CTL |
|
||||
TVDAC_B_SENSE_CTL |
|
||||
TVDAC_C_SENSE_CTL |
|
||||
DAC_CTL_OVERRIDE |
|
||||
DAC_A_0_7_V |
|
||||
DAC_B_0_7_V |
|
||||
DAC_C_0_7_V);
|
||||
I915_WRITE(TV_CTL, tv_ctl);
|
||||
I915_WRITE(TV_DAC, tv_dac);
|
||||
intel_wait_for_vblank(dev);
|
||||
tv_dac = I915_READ(TV_DAC);
|
||||
I915_WRITE(TV_DAC, save_tv_dac);
|
||||
I915_WRITE(TV_CTL, save_tv_ctl);
|
||||
intel_wait_for_vblank(dev);
|
||||
/*
|
||||
* A B C
|
||||
* 0 1 1 Composite
|
||||
|
|
Loading…
Reference in New Issue