diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/radeon_display.c | 21 | ||||
-rw-r--r-- | src/radeon_driver.c | 12 | ||||
-rw-r--r-- | src/radeon_probe.h | 1 |
3 files changed, 20 insertions, 14 deletions
diff --git a/src/radeon_display.c b/src/radeon_display.c index e2d895d1..63b804ee 100644 --- a/src/radeon_display.c +++ b/src/radeon_display.c @@ -1347,14 +1347,17 @@ Bool RADEONMapControllers(ScrnInfoPtr pScrn) if(info->HasCRTC2) { if(info->IsSecondary) { + pRADEONEnt->Controller[1].binding = 2; info->DisplayType = pRADEONEnt->Controller[1].pPort->MonType; pScrn->monitor->DDC = pRADEONEnt->Controller[1].pPort->MonInfo; } else { + pRADEONEnt->Controller[1].binding = 1; info->DisplayType = pRADEONEnt->Controller[0].pPort->MonType; pScrn->monitor->DDC = pRADEONEnt->Controller[0].pPort->MonInfo; } if(!pRADEONEnt->HasSecondary) { + pRADEONEnt->Controller[1].binding = 1; info->MergeType = pRADEONEnt->Controller[1].pPort->MonType; } } else { @@ -1363,6 +1366,7 @@ Bool RADEONMapControllers(ScrnInfoPtr pScrn) info->DisplayType = pRADEONEnt->Controller[0].pPort->MonType; pScrn->monitor->DDC = pRADEONEnt->Controller[0].pPort->MonInfo; pRADEONEnt->Controller[1].pPort->MonType = MT_NONE; + pRADEONEnt->Controller[1].binding = 1; } if (!info->IsSecondary) { @@ -2008,7 +2012,7 @@ void RADEONBlank(ScrnInfoPtr pScrn) if (!info->HasCRTC2) return; - if (info->MergedFB) { + if (pRADEONEnt->Controller[1].binding == 1) { RADEONBlankSet(pScrn, 1); OUTREGP (RADEON_CRTC2_GEN_CNTL, RADEON_CRTC2_DISP_DIS | @@ -2077,7 +2081,7 @@ void RADEONUnblank(ScrnInfoPtr pScrn) if (!info->HasCRTC2) return; - if (info->MergedFB) { + if (pRADEONEnt->Controller[1].binding == 1) { RADEONUnblankSet(pScrn, 1); OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~(RADEON_CRTC2_DISP_DIS | @@ -2186,6 +2190,7 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, int flags) { RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); unsigned char *RADEONMMIO = info->MMIO; if (!pScrn->vtSema) return; @@ -2215,7 +2220,7 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, if (info->IsSecondary) OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~mask2); else { - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) OUTREGP(RADEON_CRTC2_GEN_CNTL, 0, ~mask2); OUTREGP(RADEON_CRTC_EXT_CNTL, 0, ~mask1); } @@ -2228,7 +2233,7 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS), ~mask2); else { - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) OUTREGP(RADEON_CRTC2_GEN_CNTL, (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS), ~mask2); @@ -2245,7 +2250,7 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS), ~mask2); else { - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) OUTREGP(RADEON_CRTC2_GEN_CNTL, (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS), ~mask2); @@ -2260,7 +2265,7 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, if (info->IsSecondary) OUTREGP(RADEON_CRTC2_GEN_CNTL, mask2, ~mask2); else { - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) OUTREGP(RADEON_CRTC2_GEN_CNTL, mask2, ~mask2); OUTREGP(RADEON_CRTC_EXT_CNTL, mask1, ~mask1); } @@ -2269,14 +2274,14 @@ void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, if (PowerManagementMode == DPMSModeOn) { RADEONDPMSSetOn(pScrn, info->IsSecondary ? 1 : 0); - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) RADEONDPMSSetOn(pScrn, 1); } else if ((PowerManagementMode == DPMSModeOff) || (PowerManagementMode == DPMSModeSuspend) || (PowerManagementMode == DPMSModeStandby)) { RADEONDPMSSetOff(pScrn, info->IsSecondary ? 1 : 0); - if (info->MergedFB) + if (pRADEONEnt->Controller[1].binding == 1) RADEONDPMSSetOff(pScrn, 1); } } diff --git a/src/radeon_driver.c b/src/radeon_driver.c index b38c6ef2..da7d6375 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -2967,7 +2967,7 @@ static Bool RADEONPreInitModes(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10) xf86SetCrtcForModes(pScrn, 0); if (info->HasCRTC2) { - if (info->MergedFB) { + if (pRADEONEnt->Controller[1].binding == 1) { /* If we have 2 screens from the config file, we don't need * to do clone thing, let each screen handles one head. @@ -2996,7 +2996,7 @@ static Bool RADEONPreInitModes(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10) } xf86PrintModes(pScrn); - if(info->MergedFB) { + if(pRADEONEnt->Controller[1].binding == 1) { xf86SetCrtcForModes(info->CRT2pScrn, INTERLACE_HALVE_V); @@ -5796,7 +5796,7 @@ static void RADEONRestoreMode(ScrnInfoPtr pScrn, RADEONSavePtr restore) } else { RADEONRestoreMemMapRegisters(pScrn, restore); RADEONRestoreCommonRegisters(pScrn, restore); - if (info->MergedFB) { + if (pCRTC2->binding == 1) { RADEONRestoreCrtc2Registers(pScrn, restore); RADEONRestorePLL2Registers(pScrn, restore); } @@ -5805,14 +5805,14 @@ static void RADEONRestoreMode(ScrnInfoPtr pScrn, RADEONSavePtr restore) RADEONRestorePLLRegisters(pScrn, restore); RADEONRestoreFPRegisters(pScrn, restore); RADEONEnableDisplay(pScrn, pCRTC1, TRUE); - if (info->MergedFB) { + if (pCRTC2->binding == 1) { RADEONEnableDisplay(pScrn, pCRTC2, TRUE); } } } else { RADEONRestoreMemMapRegisters(pScrn, restore); RADEONRestoreCommonRegisters(pScrn, restore); - if ((info->MergedFB) || pRADEONEnt->HasSecondary) { + if ((pCRTC2->binding == 1) || pRADEONEnt->HasSecondary) { RADEONRestoreCrtc2Registers(pScrn, restore); RADEONRestorePLL2Registers(pScrn, restore); } @@ -5821,7 +5821,7 @@ static void RADEONRestoreMode(ScrnInfoPtr pScrn, RADEONSavePtr restore) RADEONRestorePLLRegisters(pScrn, restore); RADEONRestoreFPRegisters(pScrn, restore); RADEONEnableDisplay(pScrn, pCRTC1, TRUE); - if ((info->MergedFB) || pRADEONEnt->HasSecondary) { + if ((pCRTC2->binding == 1) || pRADEONEnt->HasSecondary) { RADEONEnableDisplay(pScrn, pCRTC2, TRUE); } } diff --git a/src/radeon_probe.h b/src/radeon_probe.h index f10ffa19..bdc80fd4 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -116,6 +116,7 @@ typedef struct { Bool IsUsed; Bool IsActive; + int binding; // which instance of the driver "owns" this controller DisplayModePtr pCurMode; RADEONConnector* pPort; } RADEONController; |