hrev43725 adds 1 changeset to branch 'master' old head: 7136439799c82e1478836cbe426044597f52b6cd new head: 458166fb30ec5eede2675d3b194881b4c159e6be ---------------------------------------------------------------------------- 458166f: radeon_hd: Improve Radeon HD APU support * Backport from linux radeon drm 3a47824d * Better logic for DCE version checking [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev43725 Commit: 458166fb30ec5eede2675d3b194881b4c159e6be URL: http://cgit.haiku-os.org/haiku/commit/?id=458166f Author: Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> Date: Wed Feb 8 20:45:04 2012 UTC ---------------------------------------------------------------------------- 1 files changed, 21 insertions(+), 5 deletions(-) src/add-ons/accelerants/radeon_hd/encoder.cpp | 26 +++++++++++++++++---- ---------------------------------------------------------------------------- diff --git a/src/add-ons/accelerants/radeon_hd/encoder.cpp b/src/add-ons/accelerants/radeon_hd/encoder.cpp index e24a58f..df218c4 100644 --- a/src/add-ons/accelerants/radeon_hd/encoder.cpp +++ b/src/add-ons/accelerants/radeon_hd/encoder.cpp @@ -282,7 +282,15 @@ encoder_mode_set(uint8 id, uint32 pixelClock) case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: - if (info.dceMajor >= 4) { + if ((info.chipsetFlags & CHIP_APU) != 0) { + // aka DCE 4.1 + // Setup DIG encoder + encoder_dig_setup(connectorIndex, pixelClock, + ATOM_ENCODER_CMD_SETUP); + // Enable DIG transmitter + transmitter_dig_setup(connectorIndex, pixelClock, 0, 0, + ATOM_TRANSMITTER_ACTION_ENABLE); + } else if (info.dceMajor >= 4) { // Disable DIG transmitter transmitter_dig_setup(connectorIndex, pixelClock, 0, 0, ATOM_TRANSMITTER_ACTION_DISABLE); @@ -316,7 +324,8 @@ encoder_mode_set(uint8 id, uint32 pixelClock) } if (gConnector[connectorIndex]->encoder.isExternal == true) { - if (info.dceMajor >= 4 && info.dceMinor >= 1) { + if ((info.chipsetFlags & CHIP_APU) != 0) { + // aka DCE 4.1 encoder_external_setup(connectorIndex, pixelClock, EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP); } else { @@ -1516,7 +1525,9 @@ encoder_dpms_set_dig(uint8 crtcID, int mode) switch (mode) { case B_DPMS_ON: if (info.chipsetID == RADEON_RV710 - || info.chipsetID == RADEON_RV730) { + || info.chipsetID == RADEON_RV730 + || (info.chipsetFlags & CHIP_APU) != 0 + || info.dceMajor >= 5) { transmitter_dig_setup(connectorIndex, pll->pixelClock, 0, 0, ATOM_TRANSMITTER_ACTION_ENABLE); } else { @@ -1549,8 +1560,13 @@ encoder_dpms_set_dig(uint8 crtcID, int mode) case B_DPMS_STAND_BY: case B_DPMS_SUSPEND: case B_DPMS_OFF: - transmitter_dig_setup(connectorIndex, pll->pixelClock, 0, 0, - ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT); + if ((info.chipsetFlags & CHIP_APU) != 0 || info.dceMajor >= 5) { + transmitter_dig_setup(connectorIndex, pll->pixelClock, 0, 0, + ATOM_TRANSMITTER_ACTION_DISABLE); + } else { + transmitter_dig_setup(connectorIndex, pll->pixelClock, 0, 0, + ATOM_TRANSMITTER_ACTION_DISABLE_OUTPUT); + } if (connector_is_dp(connectorIndex)) { if (info.dceMajor >= 4) { encoder_dig_setup(connectorIndex, pll->pixelClock,