summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nv_hw.c12
-rw-r--r--src/nv_type.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/src/nv_hw.c b/src/nv_hw.c
index ab703f1..6232cd6 100644
--- a/src/nv_hw.c
+++ b/src/nv_hw.c
@@ -878,6 +878,10 @@ void NVCalcStateExt (
state->general = bpp == 16 ? 0x00101100 : 0x00100100;
state->repaint1 = hDisplaySize < 1280 ? 0x04 : 0x00;
break;
+ case NV_ARCH_40:
+ if(!pNv->FlatPanel)
+ state->control = pNv->PRAMDAC0[0x0580/4] & 0xeffffeff;
+ /* fallthrough */
case NV_ARCH_10:
case NV_ARCH_20:
case NV_ARCH_30:
@@ -1475,6 +1479,10 @@ void NVLoadStateExt (
VGA_WR08(pNv->PCIO, 0x03D5, state->interlace);
if(!pNv->FlatPanel) {
+ if(pNv->Architecture >= NV_ARCH_40) {
+ pNv->PRAMDAC0[0x0580/4] = state->control;
+ }
+
pNv->PRAMDAC0[0x050C/4] = state->pllsel;
pNv->PRAMDAC0[0x0508/4] = state->vpll;
if(pNv->twoHeads)
@@ -1541,6 +1549,10 @@ void NVUnloadStateExt
state->scale = pNv->PRAMDAC[0x0848/4];
state->config = pNv->PFB[0x0200/4];
+ if(pNv->Architecture >= NV_ARCH_40 && !pNv->FlatPanel) {
+ state->control = pNv->PRAMDAC0[0x0580/4];
+ }
+
if(pNv->Architecture >= NV_ARCH_10) {
if(pNv->twoHeads) {
state->head = pNv->PCRTC0[0x0860/4];
diff --git a/src/nv_type.h b/src/nv_type.h
index d704e2e..6b29d99 100644
--- a/src/nv_type.h
+++ b/src/nv_type.h
@@ -56,6 +56,7 @@ typedef struct _riva_hw_state
U032 vpllB;
U032 vpll2B;
U032 pllsel;
+ U032 control;
U032 general;
U032 crtcOwner;
U032 head;