xf86-video-nv: Branch 'randr-1.2' - 3 commits - src/g80_dac.c src/g80_display.c src/g80_driver.c src/g80_sor.c

Aaron Plattner aplattner at kemper.freedesktop.org
Sat Apr 14 09:07:50 EEST 2007


 src/g80_dac.c     |   44 ++++++++++++++++++++++++++++++++++-----
 src/g80_display.c |   60 ------------------------------------------------------
 src/g80_driver.c  |    7 ------
 src/g80_sor.c     |   34 ++++++++++++++++++++++++------
 4 files changed, 66 insertions(+), 79 deletions(-)

New commits:
diff-tree f7c62016f8bf9ced7d56f74ce26e13b6df040379 (from f1cda5eaba9cbbfeb913d249d014586a6e8fd7a6)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Fri Apr 13 23:02:35 2007 -0700

    G80: Get rid of debug printouts.

diff --git a/src/g80_dac.c b/src/g80_dac.c
index e536ef7..7848de2 100644
--- a/src/g80_dac.c
+++ b/src/g80_dac.c
@@ -84,9 +84,6 @@ G80DacModeSet(xf86OutputPtr output, Disp
     G80OutputPrivPtr pPriv = output->driver_private;
     const int dacOff = 0x80 * pPriv->or;
 
-    if(adjusted_mode)
-        ErrorF("DAC%i mode %s -> HEAD%i\n", pPriv->or, adjusted_mode->name, G80CrtcGetHead(output->crtc));
-
     if(!adjusted_mode) {
         C(0x00000400 + dacOff, 0);
         return;
diff --git a/src/g80_display.c b/src/g80_display.c
index d7f52dd..652a5a9 100644
--- a/src/g80_display.c
+++ b/src/g80_display.c
@@ -461,17 +461,11 @@ G80CrtcPrepare(xf86CrtcPtr crtc)
     xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
     int i;
 
-    ErrorF("Outputs:\n");
     for(i = 0; i < xf86_config->num_output; i++) {
         xf86OutputPtr output = xf86_config->output[i];
 
-        if(output->crtc) {
-            G80CrtcPrivPtr pPriv = output->crtc->driver_private;
-            ErrorF("\t%s -> HEAD%i\n", output->name, pPriv->head);
-        } else {
-            ErrorF("\t%s disconnected\n", output->name);
+        if(!output->crtc)
             output->funcs->mode_set(output, NULL, NULL);
-        }
     }
 }
 
diff --git a/src/g80_driver.c b/src/g80_driver.c
index 6ab92ee..a3d86c7 100644
--- a/src/g80_driver.c
+++ b/src/g80_driver.c
@@ -131,7 +131,6 @@ G80ResizeScreen(ScrnInfoPtr pScrn, int w
 
     pitch = (pitch + 255) & ~255;
 
-    ErrorF("Resizing screen to %ix%i\n", width, height);
     pScrn->virtualX = width;
     pScrn->virtualY = height;
 
@@ -481,12 +480,6 @@ G80BlockHandler(int i, pointer blockData
 static Bool
 G80SaveScreen(ScreenPtr pScreen, int mode)
 {
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-
-    if(!pScrn->vtSema) return FALSE;
-
-    ErrorF("SaveScreen unimplemented\n");
-
     return FALSE;
 }
 
diff --git a/src/g80_sor.c b/src/g80_sor.c
index 5187d1f..90119f0 100644
--- a/src/g80_sor.c
+++ b/src/g80_sor.c
@@ -71,9 +71,6 @@ G80SorModeSet(xf86OutputPtr output, Disp
     G80OutputPrivPtr pPriv = output->driver_private;
     const int sorOff = 0x40 * pPriv->or;
 
-    if(adjusted_mode)
-        ErrorF("SOR%i mode %s -> HEAD%i\n", pPriv->or, adjusted_mode->name, G80CrtcGetHead(output->crtc));
-
     if(!adjusted_mode) {
         /* Disconnect the SOR */
         C(0x00000600 + sorOff, 0);
diff-tree f1cda5eaba9cbbfeb913d249d014586a6e8fd7a6 (from 550af781bd9f7cb7256b298281c2c27febfc4722)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Fri Apr 13 22:29:57 2007 -0700

    G80: Get DPMS working with RandR 1.2.
    
    Work around xf86DisableUnusedFunctions lameness by forcing DPMSModeOn at modeset
    time.

diff --git a/src/g80_dac.c b/src/g80_dac.c
index ac82616..e536ef7 100644
--- a/src/g80_dac.c
+++ b/src/g80_dac.c
@@ -27,6 +27,9 @@
 
 #include <unistd.h>
 
+#define DPMS_SERVER
+#include <X11/extensions/dpms.h>
+
 #include "g80_type.h"
 #include "g80_display.h"
 #include "g80_output.h"
@@ -44,7 +47,33 @@ G80DacSetPClk(xf86OutputPtr output, int 
 static void
 G80DacDPMSSet(xf86OutputPtr output, int mode)
 {
-    ErrorF("DAC dpms unimplemented\n");
+    G80Ptr pNv = G80PTR(output->scrn);
+    G80OutputPrivPtr pPriv = output->driver_private;
+    const int off = 0x800 * pPriv->or;
+    CARD32 tmp;
+
+    /*
+     * DPMSModeOn       everything on
+     * DPMSModeStandby  hsync disabled, vsync enabled
+     * DPMSModeSuspend  hsync enabled, vsync disabled
+     * DPMSModeOff      sync disabled
+     */
+    while(pNv->reg[(0x0061A004+off)/4] & 0x80000000);
+
+    tmp = pNv->reg[(0x0061A004+off)/4];
+    tmp &= ~0x7f;
+    tmp |= 0x80000000;
+
+    if(mode == DPMSModeStandby || mode == DPMSModeOff)
+        tmp |= 1;
+    if(mode == DPMSModeSuspend || mode == DPMSModeOff)
+        tmp |= 4;
+    if(mode != DPMSModeOn)
+        tmp |= 0x10;
+    if(mode == DPMSModeOff)
+        tmp |= 0x40;
+
+    pNv->reg[(0x0061A004+off)/4] = tmp;
 }
 
 static void
@@ -63,6 +92,11 @@ G80DacModeSet(xf86OutputPtr output, Disp
         return;
     }
 
+    // This wouldn't be necessary, but the server is stupid and calls
+    // G80DacDPMSSet after the output is disconnected, even though the hardware
+    // turns it off automatically.
+    G80DacDPMSSet(output, DPMSModeOn);
+
     C(0x00000400 + dacOff,
         (G80CrtcGetHead(output->crtc) == HEAD0 ? 1 : 2) | 0x40);
     C(0x00000404 + dacOff,
@@ -94,12 +128,13 @@ G80DacLoadDetect(xf86OutputPtr output)
     G80OutputPrivPtr pPriv = output->driver_private;
     const int scrnIndex = pScrn->scrnIndex;
     const int dacOff = 2048 * pPriv->or;
-    CARD32 load, tmp;
+    CARD32 load, tmp, tmp2;
 
     xf86DrvMsg(scrnIndex, X_PROBED, "Trying load detection on VGA%i ... ",
             pPriv->or);
 
     pNv->reg[(0x0061A010+dacOff)/4] = 0x00000001;
+    tmp2 = pNv->reg[(0x0061A004+dacOff)/4];
     pNv->reg[(0x0061A004+dacOff)/4] = 0x80150000;
     while(pNv->reg[(0x0061A004+dacOff)/4] & 0x80000000);
     tmp = pNv->architecture == 0x50 ? 420 : 340;
@@ -107,7 +142,7 @@ G80DacLoadDetect(xf86OutputPtr output)
     usleep(4500);
     load = pNv->reg[(0x0061A00C+dacOff)/4];
     pNv->reg[(0x0061A00C+dacOff)/4] = 0;
-    pNv->reg[(0x0061A004+dacOff)/4] = 0x80550000;
+    pNv->reg[(0x0061A004+dacOff)/4] = 0x80000000 | tmp2;
 
     // Use this DAC if all three channels show load.
     if((load & 0x38000000) == 0x38000000) {
diff --git a/src/g80_display.c b/src/g80_display.c
index a5a1bc8..d7f52dd 100644
--- a/src/g80_display.c
+++ b/src/g80_display.c
@@ -36,9 +36,6 @@
 #include "g80_display.h"
 #include "g80_output.h"
 
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
-
 typedef struct G80CrtcPrivRec {
     Head head;
     int pclk; /* Target pixel clock in kHz */
@@ -423,55 +420,6 @@ G80CrtcBlankScreen(xf86CrtcPtr crtc, Boo
 void
 G80CrtcDPMSSet(xf86CrtcPtr crtc, int mode)
 {
-    ErrorF("CRTC dpms unimplemented\n");
-#if 0
-    G80Ptr pNv = G80PTR(pScrn);
-    const int off = 0x800 * pNv->or;
-    CARD32 tmp;
-
-    /*
-     * DPMSModeOn       everything on
-     * DPMSModeStandby  hsync disabled, vsync enabled
-     * DPMSModeSuspend  hsync enabled, vsync disabled
-     * DPMSModeOff      sync disabled
-     */
-    switch(pNv->orType) {
-    case DAC:
-        while(pNv->reg[(0x0061A004+off)/4] & 0x80000000);
-
-        tmp = pNv->reg[(0x0061A004+off)/4];
-        tmp &= ~0x7f;
-        tmp |= 0x80000000;
-
-        if(mode == DPMSModeStandby || mode == DPMSModeOff)
-            tmp |= 1;
-        if(mode == DPMSModeSuspend || mode == DPMSModeOff)
-            tmp |= 4;
-        if(mode != DPMSModeOn)
-            tmp |= 0x10;
-        if(mode == DPMSModeOff)
-            tmp |= 0x40;
-
-        pNv->reg[(0x0061A004+off)/4] = tmp;
-
-        break;
-
-    case SOR:
-        while(pNv->reg[(0x0061C004+off)/4] & 0x80000000);
-
-        tmp = pNv->reg[(0x0061C004+off)/4];
-        tmp |= 0x80000000;
-
-        if(mode == DPMSModeOn)
-            tmp |= 1;
-        else
-            tmp &= ~1;
-
-        pNv->reg[(0x0061C004+off)/4] = tmp;
-
-        break;
-    }
-#endif
 }
 
 /******************************** Cursor stuff ********************************/
diff --git a/src/g80_sor.c b/src/g80_sor.c
index 74bccb0..5187d1f 100644
--- a/src/g80_sor.c
+++ b/src/g80_sor.c
@@ -25,6 +25,9 @@
 #include "config.h"
 #endif
 
+#define DPMS_SERVER
+#include <X11/extensions/dpms.h>
+
 #include "g80_type.h"
 #include "g80_display.h"
 #include "g80_output.h"
@@ -42,7 +45,22 @@ G80SorSetPClk(xf86OutputPtr output, int 
 static void
 G80SorDPMSSet(xf86OutputPtr output, int mode)
 {
-    ErrorF("SOR dpms unimplemented\n");
+    G80Ptr pNv = G80PTR(output->scrn);
+    G80OutputPrivPtr pPriv = output->driver_private;
+    const int off = 0x800 * pPriv->or;
+    CARD32 tmp;
+
+    while(pNv->reg[(0x0061C004+off)/4] & 0x80000000);
+
+    tmp = pNv->reg[(0x0061C004+off)/4];
+    tmp |= 0x80000000;
+
+    if(mode == DPMSModeOn)
+        tmp |= 1;
+    else
+        tmp &= ~1;
+
+    pNv->reg[(0x0061C004+off)/4] = tmp;
 }
 
 static void
@@ -62,6 +80,11 @@ G80SorModeSet(xf86OutputPtr output, Disp
         return;
     }
 
+    // This wouldn't be necessary, but the server is stupid and calls
+    // G80SorDPMSSet after the output is disconnected, even though the hardware
+    // turns it off automatically.
+    G80SorDPMSSet(output, DPMSModeOn);
+
     C(0x00000600 + sorOff,
         (G80CrtcGetHead(output->crtc) == HEAD0 ? 1 : 2) |
         (adjusted_mode->Clock > 165000 ? 0x500 : 0x100) |
diff-tree 550af781bd9f7cb7256b298281c2c27febfc4722 (from 5c03bd8acfcc814890fb13c891be4f135ea800d4)
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Mon Apr 2 09:42:11 2007 -0700

    G80: Use the right mode struct when setting up an SOR.

diff --git a/src/g80_sor.c b/src/g80_sor.c
index fe34e7e..74bccb0 100644
--- a/src/g80_sor.c
+++ b/src/g80_sor.c
@@ -64,9 +64,9 @@ G80SorModeSet(xf86OutputPtr output, Disp
 
     C(0x00000600 + sorOff,
         (G80CrtcGetHead(output->crtc) == HEAD0 ? 1 : 2) |
-        (mode->SynthClock > 165000 ? 0x500 : 0x100) |
-        ((mode->Flags & V_NHSYNC) ? 0x1000 : 0) |
-        ((mode->Flags & V_NVSYNC) ? 0x2000 : 0));
+        (adjusted_mode->Clock > 165000 ? 0x500 : 0x100) |
+        ((adjusted_mode->Flags & V_NHSYNC) ? 0x1000 : 0) |
+        ((adjusted_mode->Flags & V_NVSYNC) ? 0x2000 : 0));
 }
 
 static xf86OutputStatus



More information about the xorg-commit mailing list