summaryrefslogtreecommitdiff
path: root/src/i830_display.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2008-04-08 13:53:51 -0700
committerEric Anholt <eric@anholt.net>2008-04-09 15:18:22 -0700
commit5db73f18d2badec37523850024b9aa824e4e6bd8 (patch)
treeeb75f4b29a824c3d04811945c020b06fcd9a8488 /src/i830_display.c
parente031cc02e65acfbafb48136dad414751e04425c5 (diff)
SDVO: Use the TV reference clock for SDVO TV outputs.
Based on a patch by Will Wiseman.
Diffstat (limited to 'src/i830_display.c')
-rw-r--r--src/i830_display.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/i830_display.c b/src/i830_display.c
index 4091e792..ca5e5dcb 100644
--- a/src/i830_display.c
+++ b/src/i830_display.c
@@ -1100,6 +1100,8 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
break;
case I830_OUTPUT_SDVO:
is_sdvo = TRUE;
+ if (intel_output->needs_tv_clock)
+ is_tv = TRUE;
break;
case I830_OUTPUT_DVO_TMDS:
case I830_OUTPUT_DVO_LVDS:
@@ -1144,7 +1146,8 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
if (is_sdvo)
{
dpll |= DPLL_DVO_HIGH_SPEED;
- if (IS_I945G(pI830) || IS_I945GM(pI830) || IS_G33CLASS(pI830))
+ if ((IS_I945G(pI830) || IS_I945GM(pI830) || IS_G33CLASS(pI830)) &&
+ !is_tv)
{
int sdvo_pixel_multiply = adjusted_mode->Clock / mode->Clock;
dpll |= (sdvo_pixel_multiply - 1) << SDVO_MULTIPLIER_SHIFT_HIRES;
@@ -1182,7 +1185,9 @@ i830_crtc_mode_set(xf86CrtcPtr crtc, DisplayModePtr mode,
}
}
- if (is_tv)
+ if (is_sdvo && is_tv)
+ dpll |= PLL_REF_INPUT_TVCLKINBC;
+ else if (is_tv)
{
/* XXX: just matching BIOS for now */
/* dpll |= PLL_REF_INPUT_TVCLKINBC; */