From 4eabb6487d142caf3d8a9e8e8cfbfa7f7e2aee6d Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Fri, 16 Mar 2012 21:38:22 -0500 Subject: [PATCH] radeon_hd: DisplayPort encoder fixes. * Handle external encoder case properly when pulling encoder mode. * Return DisplayPort encoder if DisplayPort connector. * Handle DVO properly when pulling encoder mode --- src/add-ons/accelerants/radeon_hd/display.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/add-ons/accelerants/radeon_hd/display.cpp b/src/add-ons/accelerants/radeon_hd/display.cpp index a3d14b2a13..5cb1bd4d7f 100644 --- a/src/add-ons/accelerants/radeon_hd/display.cpp +++ b/src/add-ons/accelerants/radeon_hd/display.cpp @@ -374,6 +374,21 @@ debug_displays() uint32 display_get_encoder_mode(uint32 connectorIndex) { + // Is external DisplayPort Bridge? + if (gConnector[connectorIndex]->encoderExternal.valid == true + && gConnector[connectorIndex]->encoderExternal.isDPBridge == true) { + return ATOM_ENCODER_MODE_DP; + } + + // DVO Encoders (should be bridges) + switch (gConnector[connectorIndex]->encoder.objectID) { + case ENCODER_OBJECT_ID_INTERNAL_DVO1: + case ENCODER_OBJECT_ID_INTERNAL_DDI: + case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1: + return ATOM_ENCODER_MODE_DVO; + } + + // Normal encoder situations switch (gConnector[connectorIndex]->type) { case VIDEO_CONNECTOR_DVII: case VIDEO_CONNECTOR_HDMIB: /* HDMI-B is DL-DVI; analog works fine */ @@ -401,7 +416,7 @@ display_get_encoder_mode(uint32 connectorIndex) // } // TODO: if audio detected on edid and DCE4, ATOM_ENCODER_MODE_DVI // if audio detected on edid not DCE4, ATOM_ENCODER_MODE_HDMI - return ATOM_ENCODER_MODE_DVI; + return ATOM_ENCODER_MODE_DP; case VIDEO_CONNECTOR_EDP: return ATOM_ENCODER_MODE_DP; case VIDEO_CONNECTOR_DVIA: