From ccb23a1eee0962d0aa88ed0cfb6ae82ef40b5974 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Thu, 1 Mar 2012 06:12:56 -0600 Subject: [PATCH] radeon_hd: Improve dig encoder picking --- src/add-ons/accelerants/radeon_hd/encoder.cpp | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/add-ons/accelerants/radeon_hd/encoder.cpp b/src/add-ons/accelerants/radeon_hd/encoder.cpp index d159d14b6e..7598c45334 100644 --- a/src/add-ons/accelerants/radeon_hd/encoder.cpp +++ b/src/add-ons/accelerants/radeon_hd/encoder.cpp @@ -196,16 +196,21 @@ encoder_pick_dig(uint32 connectorIndex) break; } + TRACE("%s: Found crtc %" B_PRIu32 " for connector %" B_PRIu32 "\n", + __func__, crtcID, connectorIndex); + bool linkB = gConnector[connectorIndex]->encoder.linkEnumeration == GRAPH_OBJECT_ENUM_ID2 ? true : false; - if (info.dceMajor >= 4) { + uint32 dceVersion = (info.dceMajor * 100) + info.dceMinor; + + if (dceVersion >= 400) { + // APU switch (info.chipsetID) { case RADEON_PALM: return linkB ? 1 : 0; case RADEON_SUMO: case RADEON_SUMO2: - // llano follows dce 3.2 return crtcID; } @@ -217,16 +222,14 @@ encoder_pick_dig(uint32 connectorIndex) case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: return linkB ? 5 : 4; } - ERROR("%s: picking DIG encoder on non-DIG dce 4+ encoder!\n", __func__); - } else if ((info.dceMajor >= 3) && (info.dceMinor >= 2)) { - // DCE 3.2 can drive any DIG encoder - return crtcID; } - if (encoderID == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA) { - // LVTMA can only be driven by DIG encoder 2 + if (dceVersion >= 302) + return crtcID; + + if (encoderID == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA) return 1; - } + return 0; }