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