On Thu, Nov 29, 2007 at 08:28:30AM +0800, Denise H. G. wrote:
In ScreenInit there is a rhdSave(), which saves the initial register values. During this course it saves ZERO for D1CRTC_V_SYNC_A. While restoring, it always restores ZERO for D1CRTC_V_SYNC_A, despite of whatever we write to D1CRTC_V_SYNC_A after the rhdSave().
I just put the following in `rhd_crtc.c' to work around the problem for RS690:
in DxSave():
Please remove this check. Always store the value. Restore will catch the value properly on its own.
"if (INREG(Crtc, RegOff + D1CRTC_V_SYNC_A)) Store->CrtcVSyncA = INREG(Crtc, RegOff + D1CRTC_V_SYNC_A);"
Please put a RHDDebug(Crtc->scrnIndex, "%s: D1CRTC_V_SYNC_A = 0x%08X\n", __func__, Store->Store->CrtcVSyncA); here, so that the value of this register is read out to the log, so that we can be absolutely certain.
in DxRestore():
"if (Store->CrtcVSyncA) OUTREG(Crtc, RegOff + D1CRTC_V_SYNC_A, Store->CrtcVSyncA);"
I don't know if it is good, but this solves the VT switching problem for RS690. hehe
This seems like a rather bad idea in itself, but on the other hand, it is a _very_ good lead to the cause and a real solution. Thanks, Luc Verhaegen. SUSE/Novell X Driver Developer, Night shift. -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org