xf86-video-ati: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Mon Nov 3 12:12:53 PST 2008


 src/atombios_output.c |   21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

New commits:
commit 44abaa0ea8e5e3bbe833fa73e6d011618bb6d7e7
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Nov 3 15:09:28 2008 -0500

    Fix HDMI output setup on DIG1/DIG2.
    
    The only reliable way to detect an HDMI sink is to check for the
    appropriate EDID extension block, so this will only work right on
    servers with xf86DoEEDID().  RANDR 1.2 will call this internally for
    us if it exists, but pre-1.6 servers are out of luck.

diff --git a/src/atombios_output.c b/src/atombios_output.c
index 49de04f..81187ae 100644
--- a/src/atombios_output.c
+++ b/src/atombios_output.c
@@ -375,6 +375,20 @@ atombios_output_digital_setup(xf86OutputPtr output, int device, DisplayModePtr m
 }
 
 static int
+atombios_maybe_hdmi_mode(xf86OutputPtr output)
+{
+#ifndef EDID_COMPLETE_RAWDATA
+    /* there's no getting this right unless we have complete EDID */
+    return ATOM_ENCODER_MODE_HDMI;
+#else
+    if (output && xf86MonitorIsHDMI(output->MonInfo))
+	return ATOM_ENCODER_MODE_HDMI;
+
+    return ATOM_ENCODER_MODE_DVI;
+#endif
+}
+
+static int
 atombios_output_dig1_setup(xf86OutputPtr output, DisplayModePtr mode)
 {
     RADEONOutputPrivatePtr radeon_output = output->driver_private;
@@ -405,7 +419,7 @@ atombios_output_dig1_setup(xf86OutputPtr output, DisplayModePtr mode)
     if (OUTPUT_IS_DVI)
 	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_DVI;
     else if (radeon_output->type == OUTPUT_HDMI)
-	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_HDMI;
+	disp_data.ucEncoderMode = atombios_maybe_hdmi_mode(output);
     else if (radeon_output->type == OUTPUT_DP)
 	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_DP;
     else if (radeon_output->type == OUTPUT_LVDS)
@@ -514,7 +528,7 @@ atombios_output_dig2_setup(xf86OutputPtr output, DisplayModePtr mode)
     if (OUTPUT_IS_DVI)
 	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_DVI;
     else if (radeon_output->type == OUTPUT_HDMI)
-	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_HDMI;
+	disp_data.ucEncoderMode = atombios_maybe_hdmi_mode(output);
     else if (radeon_output->type == OUTPUT_DP)
 	disp_data.ucEncoderMode = ATOM_ENCODER_MODE_DP;
     else if (radeon_output->type == OUTPUT_LVDS)
@@ -858,7 +872,8 @@ atombios_set_output_crtc_source(xf86OutputPtr output)
 		if (OUTPUT_IS_DVI)
 		    crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_DVI;
 		else if (radeon_output->type == OUTPUT_HDMI)
-		    crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_HDMI;
+		    crtc_src_param2.ucEncodeMode =
+			atombios_maybe_hdmi_mode(output);
 		else if (radeon_output->type == OUTPUT_DP)
 		    crtc_src_param2.ucEncodeMode = ATOM_ENCODER_MODE_DP;
 	    } else if (radeon_output->MonType == MT_LCD) {


More information about the xorg-commit mailing list