This patch against the DRI trunk is an attempt to fix this in a similar
way as I did in the r128 driver. I'd appreciate very much if it could be
tested both with and without Option "UseFBDev" and both with and without
DRI enabled. In particular if switching back to X from console works.
--
Earthling Michel D�nzer (MrCooper)/ Debian GNU/Linux (powerpc) developer
XFree86 and DRI project member / CS student, Free Software enthusiast
Index: radeon_driver.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v
retrieving revision 1.18
diff -u -r1.18 radeon_driver.c
--- radeon_driver.c 2001/10/07 14:47:26 1.18
+++ radeon_driver.c 2001/12/01 14:09:02
@@ -114,8 +114,6 @@
static void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn,
int PowerManagementMode,
int flags);
-static Bool RADEONEnterVTFBDev(int scrnIndex, int flags);
-static void RADEONLeaveVTFBDev(int scrnIndex, int flags);
typedef enum {
OPTION_NOACCEL,
@@ -2293,8 +2291,6 @@
if (!fbdevHWInit(pScrn, info->PciInfo, NULL)) return FALSE;
pScrn->SwitchMode = fbdevHWSwitchMode;
pScrn->AdjustFrame = fbdevHWAdjustFrame;
- pScrn->EnterVT = RADEONEnterVTFBDev;
- pScrn->LeaveVT = RADEONLeaveVTFBDev;
pScrn->ValidMode = fbdevHWValidMode;
}
@@ -4382,18 +4378,23 @@
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONTRACE(("RADEONEnterVT\n"));
+
+ if (info->FBDev) {
+ if (!fbdevHWEnterVT(scrnIndex,flags)) return FALSE;
+ info->PaletteSavedOnVT = FALSE;
+ } else
+ if (!RADEONModeInit(pScrn, pScrn->currentMode)) return FALSE;
+
+ if (info->accelOn)
+ RADEONEngineRestore(pScrn);
+
#ifdef XF86DRI
if (RADEONPTR(pScrn)->directRenderingEnabled) {
RADEONCP_START(pScrn, info);
DRIUnlock(pScrn->pScreen);
}
#endif
- if (!RADEONModeInit(pScrn, pScrn->currentMode)) return FALSE;
- if (info->accelOn)
- RADEONEngineRestore(pScrn);
-
- /*info->PaletteSavedOnVT = FALSE;*/
RADEONAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
return TRUE;
}
@@ -4404,7 +4405,7 @@
{
ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
RADEONInfoPtr info = RADEONPTR(pScrn);
- /*RADEONSavePtr save = &info->ModeReg;*/
+ RADEONSavePtr save = &info->ModeReg;
RADEONTRACE(("RADEONLeaveVT\n"));
#ifdef XF86DRI
@@ -4413,34 +4414,13 @@
RADEONCP_STOP(pScrn, info);
}
#endif
- /* not used at present */
- /*
- RADEONSavePalette(pScrn, save);
- info->PaletteSavedOnVT = TRUE;*/
- RADEONRestore(pScrn);
-}
-
-static Bool
-RADEONEnterVTFBDev(int scrnIndex, int flags)
-{
- ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- RADEONSavePtr restore = &info->SavedReg;
- fbdevHWEnterVT(scrnIndex,flags);
- RADEONRestorePalette(pScrn,restore);
- if (info->accelOn)
- RADEONEngineRestore(pScrn);
- return TRUE;
-}
-
-static void RADEONLeaveVTFBDev(int scrnIndex, int flags)
-{
- ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
- RADEONInfoPtr info = RADEONPTR(pScrn);
- RADEONSavePtr save = &info->SavedReg;
- RADEONSavePalette(pScrn,save);
- fbdevHWLeaveVT(scrnIndex,flags);
+ if (info->FBDev) {
+ RADEONSavePalette(pScrn, save);
+ info->PaletteSavedOnVT = TRUE;
+ fbdevHWLeaveVT(scrnIndex,flags);
+ } else
+ RADEONRestore(pScrn);
}
/* Called at the end of each server generation. Restore the original text