diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-02-12 12:02:57 -0500 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2009-02-12 12:02:57 -0500 |
commit | 0804dde9012cf33f614a1c2ee6d5d0def040a9af (patch) | |
tree | 13de64ca2dcd837ffafb0999d111ce54e0776024 | |
parent | d98359b20e1eb8eae893581ab199c299c8352dc4 (diff) |
AVIVO: fix dualhead/rotation for real
-rw-r--r-- | src/atombios_crtc.c | 19 | ||||
-rw-r--r-- | src/radeon.h | 3 | ||||
-rw-r--r-- | src/radeon_driver.c | 6 |
3 files changed, 11 insertions, 17 deletions
diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index e79ba138..432cebe0 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -455,23 +455,6 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, x = 0; y = 0; fb_location = fb_location + (char *)crtc->rotatedData - (char *)info->FB; - switch (crtc->rotation) { - case RR_Rotate_0: - case RR_Rotate_180: - OUTREG(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, pScrn->virtualX); - OUTREG(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, pScrn->virtualY); - default: - break; - case RR_Rotate_90: - case RR_Rotate_270: - OUTREG(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, pScrn->virtualY); - OUTREG(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, pScrn->virtualX); - break; - - } - } else { - OUTREG(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, pScrn->virtualX); - OUTREG(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, pScrn->virtualY); } OUTREG(AVIVO_D1GRPH_PRIMARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset, fb_location); @@ -482,6 +465,8 @@ atombios_crtc_mode_set(xf86CrtcPtr crtc, OUTREG(AVIVO_D1GRPH_SURFACE_OFFSET_Y + radeon_crtc->crtc_offset, 0); OUTREG(AVIVO_D1GRPH_X_START + radeon_crtc->crtc_offset, 0); OUTREG(AVIVO_D1GRPH_Y_START + radeon_crtc->crtc_offset, 0); + OUTREG(AVIVO_D1GRPH_X_END + radeon_crtc->crtc_offset, info->virtualX); + OUTREG(AVIVO_D1GRPH_Y_END + radeon_crtc->crtc_offset, info->virtualY); OUTREG(AVIVO_D1GRPH_PITCH + radeon_crtc->crtc_offset, crtc->scrn->displayWidth); OUTREG(AVIVO_D1GRPH_ENABLE + radeon_crtc->crtc_offset, 1); diff --git a/src/radeon.h b/src/radeon.h index 66b23304..2944fe88 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -836,6 +836,9 @@ typedef struct { /* some server chips have a hardcoded edid in the bios so that they work with KVMs */ Bool get_hardcoded_edid_from_bios; + int virtualX; + int virtualY; + } RADEONInfoRec, *RADEONInfoPtr; #define RADEONWaitForFifo(pScrn, entries) \ diff --git a/src/radeon_driver.c b/src/radeon_driver.c index b0817b0a..813b25e0 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -3248,6 +3248,12 @@ Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen, info->crtc_on = FALSE; info->crtc2_on = FALSE; + /* save the real front buffer size + * it changes with randr, rotation, etc. + */ + info->virtualX = pScrn->virtualX; + info->virtualY = pScrn->virtualY; + RADEONSave(pScrn); /* set initial bios scratch reg state */ |