All of lore.kernel.org
 help / color / mirror / Atom feed
* NV50: Some patches that need testing.
@ 2008-03-11 22:32 Maarten Maathuis
       [not found] ` <6d4bc9fc0803111532j6fe3cc8m9eaf8ba6eeb1b86f-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: Maarten Maathuis @ 2008-03-11 22:32 UTC (permalink / raw)
  To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: b.rathmann-8Hv+JYX2azE

[-- Attachment #1: Type: text/plain, Size: 283 bytes --]

Someone with a known good setup needs to test these patches.

Koala_BR is the obvious candidate, but i'm sending them to the
mailinglist anyway.

These are not extremely drastic, but i still need conformation that
they work, before i can proceed with more serious changes.

Maarten.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-NV50-Switch-to-the-same-output-type-as-the-rest-of.patch --]
[-- Type: text/x-patch; name=0001-NV50-Switch-to-the-same-output-type-as-the-rest-of.patch, Size: 4837 bytes --]

From 6c9ad7a775e5582987350362a6d6433af7dcdacb Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 19:29:11 +0100
Subject: [PATCH] NV50: Switch to the same output type as the rest of the code.

---
 src/nv50_dac.c    |    2 +-
 src/nv50_output.c |    4 ++--
 src/nv50_output.h |    6 +++---
 src/nv50_sor.c    |   15 +++++++--------
 src/nv50_type.h   |   10 ----------
 5 files changed, 13 insertions(+), 24 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index ec24aa3..9cfa441 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -195,7 +195,7 @@ NV50CreateDac(ScrnInfoPtr pScrn, ORNum or)
 	snprintf(orName, 5, "VGA%i", or);
 	output = xf86OutputCreate(pScrn, &NV50DacOutputFuncs, orName);
 
-	nv_output->type = DAC;
+	nv_output->type = OUTPUT_ANALOG;
 	nv_output->or = or;
 	nv_output->cached_status = XF86OutputStatusUnknown;
 	nv_output->set_pclk = NV50DacSetPClk;
diff --git a/src/nv50_output.c b/src/nv50_output.c
index d264668..7314df0 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -329,7 +329,7 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 		if (pNv->i2cMap[i].dac != -1)
 			dac = NV50CreateDac(pScrn, pNv->i2cMap[i].dac);
 		if (pNv->i2cMap[i].sor != -1)
-			sor = NV50CreateSor(pScrn, pNv->i2cMap[i].sor, TMDS);
+			sor = NV50CreateSor(pScrn, pNv->i2cMap[i].sor, OUTPUT_TMDS);
 
 		if (dac) {
 			NV50OutputPrivPtr nv_output = dac->driver_private;
@@ -348,7 +348,7 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 	}
 
 	if (pNv->lvds.present) {
-		xf86OutputPtr lvds = NV50CreateSor(pScrn, pNv->lvds.or, LVDS);
+		xf86OutputPtr lvds = NV50CreateSor(pScrn, pNv->lvds.or, OUTPUT_LVDS);
 		NV50OutputPrivPtr nv_output = lvds->driver_private;
 
 		nv_output->scale = NV50_SCALE_ASPECT;
diff --git a/src/nv50_output.h b/src/nv50_output.h
index d0880e4..d314813 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -2,11 +2,11 @@
 #define __NV50_OUTPUT_H__
 
 #include "nv50_display.h"
+#include "nv_type.h"
 
 typedef struct NV50OutputPrivRec {
-    ORType type;
     ORNum or;
-    PanelType panelType;
+    NVOutputType type;
     DisplayModePtr nativeMode;
     enum NV50ScaleMode scale;
 
@@ -33,6 +33,6 @@ xf86OutputPtr NV50CreateDac(ScrnInfoPtr, ORNum);
 Bool NV50DacLoadDetect(xf86OutputPtr);
 
 /* nv50_sor.c */
-xf86OutputPtr NV50CreateSor(ScrnInfoPtr, ORNum, PanelType);
+xf86OutputPtr NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type);
 
 #endif
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 1648f6d..958cb0a 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -102,7 +102,7 @@ NV50SorModeSet(xf86OutputPtr output, DisplayModePtr mode,
 		return;
 	}
 
-	if (nv_output->panelType == LVDS) {
+	if (nv_output->type == OUTPUT_LVDS) {
 		type = 0;
 	} else
 	if (adjusted_mode->Clock > 165000) {
@@ -353,7 +353,7 @@ NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 		}
 		if (!modes[i].name)
 			return FALSE;
-		if (scale == NV50_SCALE_OFF && nv_output->panelType == LVDS)
+		if (scale == NV50_SCALE_OFF && nv_output->type == OUTPUT_LVDS)
 			// LVDS requires scaling
 			return FALSE;
 
@@ -461,7 +461,7 @@ GetLVDSNativeMode(ScrnInfoPtr pScrn)
 }
 
 xf86OutputPtr
-NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, PanelType panelType)
+NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 {
 	NV50OutputPrivPtr nv_output = xnfcalloc(sizeof(*nv_output), 1);
 	NVPtr pNv = NVPTR(pScrn);
@@ -472,7 +472,7 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, PanelType panelType)
 	if(!nv_output)
 		return NULL;
 
-	if(panelType == LVDS) {
+	if(type == OUTPUT_LVDS) {
 		strcpy(orName, "LVDS");
 		funcs = &NV50SorLVDSOutputFuncs;
 
@@ -495,17 +495,16 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, PanelType panelType)
 
 	output = xf86OutputCreate(pScrn, funcs, orName);
 
-	nv_output->type = SOR;
 	nv_output->or = or;
-	nv_output->panelType = panelType;
+	nv_output->type = type;
 	nv_output->cached_status = XF86OutputStatusUnknown;
-	if (panelType == TMDS)
+	if (type == OUTPUT_TMDS)
 		nv_output->set_pclk = NV50SorSetPClk;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
 	output->doubleScanAllowed = TRUE;
 
-	if (panelType != LVDS) {
+	if (type != OUTPUT_LVDS) {
 		NVWrite(pNv, 0x0061c00c + nv_output->or * 0x800, 0x03010700);
 		NVWrite(pNv, 0x0061c010 + nv_output->or * 0x800, 0x0000152f);
 		NVWrite(pNv, 0x0061c014 + nv_output->or * 0x800, 0x00000000);
diff --git a/src/nv50_type.h b/src/nv50_type.h
index 40fd099..5a3a9a1 100644
--- a/src/nv50_type.h
+++ b/src/nv50_type.h
@@ -6,11 +6,6 @@ typedef enum Head {
     HEAD1
 } Head;
 
-typedef enum ORType {
-   DAC,
-   SOR
-} ORType;
-
 typedef enum ORNum {
    DAC0 = 0,
    DAC1 = 1,
@@ -19,9 +14,4 @@ typedef enum ORNum {
    SOR1 = 1
 } ORNum;
 
-typedef enum PanelType {
-    TMDS,
-    LVDS
-} PanelType;
-
 #endif
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-NV50-Switch-to-other-scaling-defines.patch --]
[-- Type: text/x-patch; name=0002-NV50-Switch-to-other-scaling-defines.patch, Size: 5692 bytes --]

From 7eee01bf8a6d076bb1ce03e37daa52296efc1a42 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 19:50:25 +0100
Subject: [PATCH] NV50: Switch to other scaling defines.

---
 src/nv50_dac.c     |    2 +-
 src/nv50_display.c |   10 +++++-----
 src/nv50_display.h |    9 +--------
 src/nv50_output.c  |    6 +++---
 src/nv50_output.h  |    2 +-
 src/nv50_sor.c     |   16 ++++++++--------
 src/nv50_type.h    |    2 ++
 7 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index 9cfa441..69bb828 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -103,7 +103,7 @@ NV50DacModeSet(xf86OutputPtr output, DisplayModePtr mode,
 		(adjusted_mode->Flags & V_NHSYNC) ? 1 : 0 |
 		(adjusted_mode->Flags & V_NVSYNC) ? 2 : 0);
 
-	NV50CrtcSetScale(output->crtc, adjusted_mode, NV50_SCALE_OFF);
+	NV50CrtcSetScale(output->crtc, adjusted_mode, SCALE_PANEL);
 }
 
 /*
diff --git a/src/nv50_display.c b/src/nv50_display.c
index 45a852c..37c69c0 100644
--- a/src/nv50_display.c
+++ b/src/nv50_display.c
@@ -465,20 +465,20 @@ static void ComputeAspectScale(DisplayModePtr mode, int *outX, int *outY)
 	*outY = mode->VDisplay * scale;
 }
 
-void NV50CrtcSetScale(xf86CrtcPtr crtc, DisplayModePtr mode, enum NV50ScaleMode scale)
+void NV50CrtcSetScale(xf86CrtcPtr crtc, DisplayModePtr mode, enum scaling_modes scale)
 {
 	int outX = 0, outY = 0;
 
 	switch(scale) {
-		case NV50_SCALE_ASPECT:
+		case SCALE_ASPECT:
 			ComputeAspectScale(mode, &outX, &outY);
 			break;
-		case NV50_SCALE_OFF:
-		case NV50_SCALE_FILL:
+		case SCALE_PANEL:
+		case SCALE_FULLSCREEN:
 			outX = mode->CrtcHDisplay;
 			outY = mode->CrtcVDisplay;
 			break;
-		case NV50_SCALE_CENTER:
+		case SCALE_NOSCALE:
 			outX = mode->HDisplay;
 			outY = mode->VDisplay;
 			break;
diff --git a/src/nv50_display.h b/src/nv50_display.h
index 1adae4f..74f2a26 100644
--- a/src/nv50_display.h
+++ b/src/nv50_display.h
@@ -3,13 +3,6 @@
 
 #include "nv50_type.h"
 
-enum NV50ScaleMode {
-	NV50_SCALE_OFF,
-	NV50_SCALE_ASPECT,
-	NV50_SCALE_FILL,
-	NV50_SCALE_CENTER
-};
-
 Bool NV50DispPreInit(ScrnInfoPtr);
 Bool NV50DispInit(ScrnInfoPtr);
 void NV50DispShutdown(ScrnInfoPtr);
@@ -23,7 +16,7 @@ void NV50CrtcDisableCursor(xf86CrtcPtr, Bool update);
 void NV50CrtcSetCursorPosition(xf86CrtcPtr, int x, int y);
 void NV50CrtcSkipModeFixup(xf86CrtcPtr);
 void NV50CrtcSetDither(xf86CrtcPtr, Bool dither, Bool update);
-void NV50CrtcSetScale(xf86CrtcPtr, DisplayModePtr, enum NV50ScaleMode);
+void NV50CrtcSetScale(xf86CrtcPtr, DisplayModePtr, enum scaling_modes);
 
 void NV50DispCreateCrtcs(ScrnInfoPtr pScrn);
 
diff --git a/src/nv50_output.c b/src/nv50_output.c
index 7314df0..5eb50ee 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -336,14 +336,14 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 
 			nv_output->partner = sor;
 			nv_output->i2c = i2c;
-			nv_output->scale = NV50_SCALE_OFF;
+			nv_output->scale = SCALE_PANEL;
 		}
 		if (sor) {
 			NV50OutputPrivPtr nv_output = sor->driver_private;
 
 			nv_output->partner = dac;
 			nv_output->i2c = i2c;
-			nv_output->scale = NV50_SCALE_ASPECT;
+			nv_output->scale = SCALE_ASPECT;
 		}
 	}
 
@@ -351,7 +351,7 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 		xf86OutputPtr lvds = NV50CreateSor(pScrn, pNv->lvds.or, OUTPUT_LVDS);
 		NV50OutputPrivPtr nv_output = lvds->driver_private;
 
-		nv_output->scale = NV50_SCALE_ASPECT;
+		nv_output->scale = SCALE_ASPECT;
 	}
 
 	/* For each output, set the crtc and clone masks */
diff --git a/src/nv50_output.h b/src/nv50_output.h
index d314813..43412b6 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -8,7 +8,7 @@ typedef struct NV50OutputPrivRec {
     ORNum or;
     NVOutputType type;
     DisplayModePtr nativeMode;
-    enum NV50ScaleMode scale;
+    enum scaling_modes scale;
 
     xf86OutputPtr partner;
     I2CBusPtr i2c;
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 958cb0a..e85256b 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -187,7 +187,7 @@ NV50SorModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 	NV50OutputPrivPtr nv_output = output->driver_private;
 	DisplayModePtr native = nv_output->nativeMode;
 
-	if(native && nv_output->scale != NV50_SCALE_OFF) {
+	if(native && nv_output->scale != SCALE_PANEL) {
 		NV50SorSetModeBackend(adjusted_mode, native);
 		// This mode is already "fixed"
 		NV50CrtcSkipModeFixup(output->crtc);
@@ -325,16 +325,16 @@ NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 		return TRUE;
 	} else if (prop == properties.scale.atom) {
 		const char *s;
-		enum NV50ScaleMode oldScale, scale;
+		enum scaling_modes oldScale, scale;
 		int i;
 		const struct {
 			const char *name;
-			enum NV50ScaleMode scale;
+			enum scaling_modes scale;
 		} modes[] = {
-			{ "off",    NV50_SCALE_OFF },
-			{ "aspect", NV50_SCALE_ASPECT },
-			{ "fill",   NV50_SCALE_FILL },
-			{ "center", NV50_SCALE_CENTER },
+			{ "panel", SCALE_PANEL },
+			{ "aspect", SCALE_ASPECT },
+			{ "fullscreen",   SCALE_FULLSCREEN },
+			{ "noscale", SCALE_NOSCALE },
 			{ NULL,     0 },
 		};
 
@@ -353,7 +353,7 @@ NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 		}
 		if (!modes[i].name)
 			return FALSE;
-		if (scale == NV50_SCALE_OFF && nv_output->type == OUTPUT_LVDS)
+		if (scale == SCALE_PANEL && nv_output->type == OUTPUT_LVDS)
 			// LVDS requires scaling
 			return FALSE;
 
diff --git a/src/nv50_type.h b/src/nv50_type.h
index 5a3a9a1..bc35fed 100644
--- a/src/nv50_type.h
+++ b/src/nv50_type.h
@@ -1,6 +1,8 @@
 #ifndef __NV50_TYPE_H__
 #define __NV50_TYPE_H__
 
+#include "nv_type.h"
+
 typedef enum Head {
     HEAD0 = 0,
     HEAD1
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-NV50-change-i2c-to-pDDCBus.patch --]
[-- Type: text/x-patch; name=0003-NV50-change-i2c-to-pDDCBus.patch, Size: 2551 bytes --]

From 31b4b28996772fb38885b8c4a1cfc6a21f18c5de Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 21:15:21 +0100
Subject: [PATCH] NV50: change i2c to pDDCBus

---
 src/nv50_dac.c    |    2 +-
 src/nv50_output.c |    8 ++++----
 src/nv50_output.h |    2 +-
 src/nv50_sor.c    |    2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index 69bb828..51c25ef 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -118,7 +118,7 @@ NV50DacDetect(xf86OutputPtr output)
 	if(nv_output->cached_status != XF86OutputStatusUnknown)
 		return nv_output->cached_status;
 
-	NV50OutputPartnersDetect(output, nv_output->partner, nv_output->i2c);
+	NV50OutputPartnersDetect(output, nv_output->partner, nv_output->pDDCBus);
 	return nv_output->cached_status;
 }
 
diff --git a/src/nv50_output.c b/src/nv50_output.c
index 5eb50ee..67844af 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -292,8 +292,8 @@ NV50OutputDestroy(xf86OutputPtr output)
 	if(nv_output->partner)
 		((NV50OutputPrivPtr)nv_output->partner->driver_private)->partner = NULL;
 	else
-		xf86DestroyI2CBusRec(nv_output->i2c, TRUE, TRUE);
-	nv_output->i2c = NULL;
+		xf86DestroyI2CBusRec(nv_output->pDDCBus, TRUE, TRUE);
+	nv_output->pDDCBus = NULL;
 }
 
 Bool
@@ -335,14 +335,14 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 			NV50OutputPrivPtr nv_output = dac->driver_private;
 
 			nv_output->partner = sor;
-			nv_output->i2c = i2c;
+			nv_output->pDDCBus = i2c;
 			nv_output->scale = SCALE_PANEL;
 		}
 		if (sor) {
 			NV50OutputPrivPtr nv_output = sor->driver_private;
 
 			nv_output->partner = dac;
-			nv_output->i2c = i2c;
+			nv_output->pDDCBus = i2c;
 			nv_output->scale = SCALE_ASPECT;
 		}
 	}
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 43412b6..7be7879 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -11,7 +11,7 @@ typedef struct NV50OutputPrivRec {
     enum scaling_modes scale;
 
     xf86OutputPtr partner;
-    I2CBusPtr i2c;
+    I2CBusPtr pDDCBus;
 
     xf86OutputStatus cached_status;
 
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index e85256b..ebf0eaf 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -133,7 +133,7 @@ NV50SorDetect(xf86OutputPtr output)
 	if(nv_output->cached_status != XF86OutputStatusUnknown)
 		return nv_output->cached_status;
 
-	NV50OutputPartnersDetect(nv_output->partner, output, nv_output->i2c);
+	NV50OutputPartnersDetect(nv_output->partner, output, nv_output->pDDCBus);
 	return nv_output->cached_status;
 }
 
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-NV50-Kill-the-connection-status-caching-which-was.patch --]
[-- Type: text/x-patch; name=0004-NV50-Kill-the-connection-status-caching-which-was.patch, Size: 4633 bytes --]

From aa5638f1b5aef16b49668c68cbddc7fb64c58122 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 21:33:29 +0100
Subject: [PATCH] NV50: Kill the connection status caching (which was broken btw).

---
 src/nv50_dac.c    |   16 +++++++++++-----
 src/nv50_output.c |   52 ----------------------------------------------------
 src/nv50_output.h |    2 --
 src/nv50_sor.c    |   16 +++++++++++-----
 4 files changed, 22 insertions(+), 64 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index 51c25ef..24f4606 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -113,13 +113,19 @@ static xf86OutputStatus
 NV50DacDetect(xf86OutputPtr output)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
+	xf86MonPtr ddc_mon;
 
-	/* Assume physical status isn't going to change before the BlockHandler */
-	if(nv_output->cached_status != XF86OutputStatusUnknown)
-		return nv_output->cached_status;
+	if (nv_output->pDDCBus == NULL)
+		return XF86OutputStatusDisconnected;
 
-	NV50OutputPartnersDetect(output, nv_output->partner, nv_output->pDDCBus);
-	return nv_output->cached_status;
+	ddc_mon = xf86OutputGetEDID(output, nv_output->pDDCBus);
+	if (!ddc_mon && !NV50DacLoadDetect(output))
+		return XF86OutputStatusDisconnected;
+
+	if (ddc_mon && ddc_mon->features.input_type) /* DVI? */
+		return XF86OutputStatusDisconnected;
+
+	return XF86OutputStatusConnected;
 }
 
 Bool
diff --git a/src/nv50_output.c b/src/nv50_output.c
index 67844af..c3cfa47 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -224,58 +224,6 @@ ProbeDDC(I2CBusPtr i2c)
 	return monInfo;
 }
 
-/*
- * Read an EDID from the i2c port.  Perform load detection on the DAC (if
- * present) to see if the display is connected via VGA.  Sets the cached status
- * of both outputs.  The status is marked dirty again in the BlockHandler.
- */
-void NV50OutputPartnersDetect(xf86OutputPtr dac, xf86OutputPtr sor, I2CBusPtr i2c)
-{
-	xf86MonPtr monInfo = ProbeDDC(i2c);
-	xf86OutputPtr connected = NULL;
-	Bool load = dac && NV50DacLoadDetect(dac);
-
-	if(dac) {
-		NV50OutputPrivPtr nv_output = dac->driver_private;
-
-		if(load) {
-			nv_output->cached_status = XF86OutputStatusConnected;
-			connected = dac;
-		} else {
-			nv_output->cached_status = XF86OutputStatusDisconnected;
-		}
-	}
-
-	if(sor) {
-		NV50OutputPrivPtr nv_output = sor->driver_private;
-
-		if(monInfo && !load) {
-			nv_output->cached_status = XF86OutputStatusConnected;
-			connected = sor;
-		} else {
-			nv_output->cached_status = XF86OutputStatusDisconnected;
-		}
-	}
-
-	if(connected)
-		xf86OutputSetEDID(connected, monInfo);
-}
-
-/*
- * Reset the cached output status for all outputs.  Called from NV50BlockHandler.
- */
-void
-NV50OutputResetCachedStatus(ScrnInfoPtr pScrn)
-{
-	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
-	int i;
-
-	for(i = 0; i < xf86_config->num_output; i++) {
-		NV50OutputPrivPtr nv_output = xf86_config->output[i]->driver_private;
-		nv_output->cached_status = XF86OutputStatusUnknown;
-	}
-}
-
 DisplayModePtr
 NV50OutputGetDDCModes(xf86OutputPtr output)
 {
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 7be7879..80c4e31 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -22,8 +22,6 @@ void NV50OutputSetPClk(xf86OutputPtr, int pclk);
 int NV50OutputModeValid(xf86OutputPtr, DisplayModePtr);
 void NV50OutputPrepare(xf86OutputPtr);
 void NV50OutputCommit(xf86OutputPtr);
-void NV50OutputPartnersDetect(xf86OutputPtr dac, xf86OutputPtr sor, I2CBusPtr i2c);
-void NV50OutputResetCachedStatus(ScrnInfoPtr);
 DisplayModePtr NV50OutputGetDDCModes(xf86OutputPtr);
 void NV50OutputDestroy(xf86OutputPtr);
 Bool NV50CreateOutputs(ScrnInfoPtr);
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index ebf0eaf..09e3473 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -128,13 +128,19 @@ static xf86OutputStatus
 NV50SorDetect(xf86OutputPtr output)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
+	xf86MonPtr ddc_mon;
 
-	/* Assume physical status isn't going to change before the BlockHandler */
-	if(nv_output->cached_status != XF86OutputStatusUnknown)
-		return nv_output->cached_status;
+	if (nv_output->pDDCBus == NULL)
+		return XF86OutputStatusDisconnected;
 
-	NV50OutputPartnersDetect(nv_output->partner, output, nv_output->pDDCBus);
-	return nv_output->cached_status;
+	ddc_mon = xf86OutputGetEDID(output, nv_output->pDDCBus);
+	if (!ddc_mon)
+		return XF86OutputStatusDisconnected;
+
+	if (!ddc_mon->features.input_type) /* Analog? */
+		return XF86OutputStatusDisconnected;
+
+	return XF86OutputStatusConnected;
 }
 
 static xf86OutputStatus
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: 0005-NV50-fix-warning.patch --]
[-- Type: text/x-patch; name=0005-NV50-fix-warning.patch, Size: 663 bytes --]

From 5a64c170761513bd9e52003b5f63fd8850309a08 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 22:12:57 +0100
Subject: [PATCH] NV50: fix warning

---
 src/nv50_display.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/nv50_display.c b/src/nv50_display.c
index 37c69c0..5391fc9 100644
--- a/src/nv50_display.c
+++ b/src/nv50_display.c
@@ -479,6 +479,7 @@ void NV50CrtcSetScale(xf86CrtcPtr crtc, DisplayModePtr mode, enum scaling_modes
 			outY = mode->CrtcVDisplay;
 			break;
 		case SCALE_NOSCALE:
+		default:
 			outX = mode->HDisplay;
 			outY = mode->VDisplay;
 			break;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-NV50-kill-partner-entry.patch --]
[-- Type: text/x-patch; name=0006-NV50-kill-partner-entry.patch, Size: 1548 bytes --]

From 216a685064004a6011bce6456cea6d86ec81ec36 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 22:22:12 +0100
Subject: [PATCH] NV50: kill partner entry

---
 src/nv50_output.c |    7 ++-----
 src/nv50_output.h |    1 -
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/src/nv50_output.c b/src/nv50_output.c
index c3cfa47..aa7fe8c 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -237,10 +237,9 @@ NV50OutputDestroy(xf86OutputPtr output)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
 
-	if(nv_output->partner)
-		((NV50OutputPrivPtr)nv_output->partner->driver_private)->partner = NULL;
-	else
+	if (nv_output->pDDCBus)
 		xf86DestroyI2CBusRec(nv_output->pDDCBus, TRUE, TRUE);
+
 	nv_output->pDDCBus = NULL;
 }
 
@@ -282,14 +281,12 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 		if (dac) {
 			NV50OutputPrivPtr nv_output = dac->driver_private;
 
-			nv_output->partner = sor;
 			nv_output->pDDCBus = i2c;
 			nv_output->scale = SCALE_PANEL;
 		}
 		if (sor) {
 			NV50OutputPrivPtr nv_output = sor->driver_private;
 
-			nv_output->partner = dac;
 			nv_output->pDDCBus = i2c;
 			nv_output->scale = SCALE_ASPECT;
 		}
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 80c4e31..cb9fbda 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -10,7 +10,6 @@ typedef struct NV50OutputPrivRec {
     DisplayModePtr nativeMode;
     enum scaling_modes scale;
 
-    xf86OutputPtr partner;
     I2CBusPtr pDDCBus;
 
     xf86OutputStatus cached_status;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-NV50-Remove-the-remnants-of-cached_status.patch --]
[-- Type: text/x-patch; name=0007-NV50-Remove-the-remnants-of-cached_status.patch, Size: 1526 bytes --]

From 450c034288f31e9aefdb88e06b6c3c71699caed5 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 22:24:46 +0100
Subject: [PATCH] NV50: Remove the remnants of cached_status.

---
 src/nv50_dac.c    |    1 -
 src/nv50_output.h |    2 --
 src/nv50_sor.c    |    1 -
 3 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index 24f4606..497c1fe 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -203,7 +203,6 @@ NV50CreateDac(ScrnInfoPtr pScrn, ORNum or)
 
 	nv_output->type = OUTPUT_ANALOG;
 	nv_output->or = or;
-	nv_output->cached_status = XF86OutputStatusUnknown;
 	nv_output->set_pclk = NV50DacSetPClk;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
diff --git a/src/nv50_output.h b/src/nv50_output.h
index cb9fbda..6ed94e6 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -12,8 +12,6 @@ typedef struct NV50OutputPrivRec {
 
     I2CBusPtr pDDCBus;
 
-    xf86OutputStatus cached_status;
-
     void (*set_pclk)(xf86OutputPtr, int pclk);
 } NV50OutputPrivRec, *NV50OutputPrivPtr;
 
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 09e3473..13f14fd 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -503,7 +503,6 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 
 	nv_output->or = or;
 	nv_output->type = type;
-	nv_output->cached_status = XF86OutputStatusUnknown;
 	if (type == OUTPUT_TMDS)
 		nv_output->set_pclk = NV50SorSetPClk;
 	output->driver_private = nv_output;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-NV50-kill-set_pclk.patch --]
[-- Type: text/x-patch; name=0008-NV50-kill-set_pclk.patch, Size: 2844 bytes --]

From e1481e3947b739d7223bfbc405816f8052948c5a Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 22:43:33 +0100
Subject: [PATCH] NV50: kill set_pclk

---
 src/nv50_dac.c    |    3 +--
 src/nv50_output.c |    7 +++++--
 src/nv50_output.h |    4 ++--
 src/nv50_sor.c    |    4 +---
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index 497c1fe..acc436d 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -30,7 +30,7 @@
 #include "nv50_display.h"
 #include "nv50_output.h"
 
-static void
+void
 NV50DacSetPClk(xf86OutputPtr output, int pclk)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
@@ -203,7 +203,6 @@ NV50CreateDac(ScrnInfoPtr pScrn, ORNum or)
 
 	nv_output->type = OUTPUT_ANALOG;
 	nv_output->or = or;
-	nv_output->set_pclk = NV50DacSetPClk;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
 	output->doubleScanAllowed = TRUE;
diff --git a/src/nv50_output.c b/src/nv50_output.c
index aa7fe8c..bdcbd15 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -172,8 +172,11 @@ NV50OutputSetPClk(xf86OutputPtr output, int pclk)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
 
-	if (nv_output->set_pclk)
-		nv_output->set_pclk(output, pclk);
+	if (nv_output->type == OUTPUT_TMDS)
+		NV50SorSetPClk(output, pclk);
+
+	if (nv_output->type == OUTPUT_ANALOG)
+		NV50DacSetPClk(output, pclk);
 }
 
 int
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 6ed94e6..820dd6e 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -11,8 +11,6 @@ typedef struct NV50OutputPrivRec {
     enum scaling_modes scale;
 
     I2CBusPtr pDDCBus;
-
-    void (*set_pclk)(xf86OutputPtr, int pclk);
 } NV50OutputPrivRec, *NV50OutputPrivPtr;
 
 void NV50OutputSetPClk(xf86OutputPtr, int pclk);
@@ -26,8 +24,10 @@ Bool NV50CreateOutputs(ScrnInfoPtr);
 /* nv50_dac.c */
 xf86OutputPtr NV50CreateDac(ScrnInfoPtr, ORNum);
 Bool NV50DacLoadDetect(xf86OutputPtr);
+void NV50DacSetPClk(xf86OutputPtr output, int pclk);
 
 /* nv50_sor.c */
 xf86OutputPtr NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type);
+void NV50SorSetPClk(xf86OutputPtr output, int pclk);
 
 #endif
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 13f14fd..414af8d 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -30,7 +30,7 @@
 #include "nv50_display.h"
 #include "nv50_output.h"
 
-static void
+void
 NV50SorSetPClk(xf86OutputPtr output, int pclk)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
@@ -503,8 +503,6 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 
 	nv_output->or = or;
 	nv_output->type = type;
-	if (type == OUTPUT_TMDS)
-		nv_output->set_pclk = NV50SorSetPClk;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
 	output->doubleScanAllowed = TRUE;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-NV50-Rename-or-to-output_resource.patch --]
[-- Type: text/x-patch; name=0009-NV50-Rename-or-to-output_resource.patch, Size: 6688 bytes --]

From c519cdd29f768ced394f302a2d6cc57af7484de7 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 23:00:19 +0100
Subject: [PATCH] NV50: Rename or to output_resource.

---
 src/nv50_dac.c    |   30 +++++++++++++++---------------
 src/nv50_output.h |    2 +-
 src/nv50_sor.c    |   22 +++++++++++-----------
 3 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index acc436d..dcbc157 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -36,7 +36,7 @@ NV50DacSetPClk(xf86OutputPtr output, int pclk)
 	NV50OutputPrivPtr nv_output = output->driver_private;
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
-	NVWrite(pNv, 0x00614280 + nv_output->or * 0x800, 0);
+	NVWrite(pNv, 0x00614280 + nv_output->output_resource * 0x800, 0);
 }
 
 static void
@@ -53,9 +53,9 @@ NV50DacDPMSSet(xf86OutputPtr output, int mode)
 	 * DPMSModeSuspend  hsync enabled, vsync disabled
 	 * DPMSModeOff      sync disabled
 	 */
-	while(NVRead(pNv, 0x0061a004 + nv_output->or * 0x800) & 0x80000000);
+	while(NVRead(pNv, 0x0061a004 + nv_output->output_resource * 0x800) & 0x80000000);
 
-	tmp = NVRead(pNv, 0x0061a004 + nv_output->or * 0x800);
+	tmp = NVRead(pNv, 0x0061a004 + nv_output->output_resource * 0x800);
 	tmp &= ~0x7f;
 	tmp |= 0x80000000;
 
@@ -68,7 +68,7 @@ NV50DacDPMSSet(xf86OutputPtr output, int mode)
 	if(mode == DPMSModeOff)
 		tmp |= 0x40;
 
-	NVWrite(pNv, 0x0061a004 + nv_output->or * 0x800, tmp);
+	NVWrite(pNv, 0x0061a004 + nv_output->output_resource * 0x800, tmp);
 }
 
 Bool
@@ -84,7 +84,7 @@ NV50DacModeSet(xf86OutputPtr output, DisplayModePtr mode,
 {
 	ScrnInfoPtr pScrn = output->scrn;
 	NV50OutputPrivPtr nv_output = output->driver_private;
-	const int dacOff = 0x80 * nv_output->or;
+	const int dacOff = 0x80 * nv_output->output_resource;
 
 	if(!adjusted_mode) {
 		NV50DisplayCommand(pScrn, 0x400 + dacOff, 0);
@@ -139,21 +139,21 @@ NV50DacLoadDetect(xf86OutputPtr output)
 	CARD32 load, tmp, tmp2;
 
 	xf86DrvMsg(scrnIndex, X_PROBED, "Trying load detection on VGA%i ... ",
-		nv_output->or);
+		nv_output->output_resource);
 
-	NVWrite(pNv, 0x0061a010 + nv_output->or * 0x800, 0x00000001);
-	tmp2 = NVRead(pNv, 0x0061a004 + nv_output->or * 0x800);
+	NVWrite(pNv, 0x0061a010 + nv_output->output_resource * 0x800, 0x00000001);
+	tmp2 = NVRead(pNv, 0x0061a004 + nv_output->output_resource * 0x800);
 
-	NVWrite(pNv, 0x0061a004 + nv_output->or * 0x800, 0x80150000);
-	while(NVRead(pNv, 0x0061a004 + nv_output->or * 0x800) & 0x80000000);
+	NVWrite(pNv, 0x0061a004 + nv_output->output_resource * 0x800, 0x80150000);
+	while(NVRead(pNv, 0x0061a004 + nv_output->output_resource * 0x800) & 0x80000000);
 	tmp = (pNv->NVArch == 0x50) ? 420 : 340;
-	NVWrite(pNv, 0x0061a00c + nv_output->or * 0x800, tmp | 0x100000);
+	NVWrite(pNv, 0x0061a00c + nv_output->output_resource * 0x800, tmp | 0x100000);
 	sigstate = xf86BlockSIGIO();
 	usleep(45000);
 	xf86UnblockSIGIO(sigstate);
-	load = NVRead(pNv, 0x0061a00c + nv_output->or * 0x800);
-	NVWrite(pNv, 0x0061a00c + nv_output->or * 0x800, 0);
-	NVWrite(pNv, 0x0061a004 + nv_output->or * 0x800, 0x80000000 | tmp2);
+	load = NVRead(pNv, 0x0061a00c + nv_output->output_resource * 0x800);
+	NVWrite(pNv, 0x0061a00c + nv_output->output_resource * 0x800, 0);
+	NVWrite(pNv, 0x0061a004 + nv_output->output_resource * 0x800, 0x80000000 | tmp2);
 
 	// Use this DAC if all three channels show load.
 	if((load & 0x38000000) == 0x38000000) {
@@ -202,7 +202,7 @@ NV50CreateDac(ScrnInfoPtr pScrn, ORNum or)
 	output = xf86OutputCreate(pScrn, &NV50DacOutputFuncs, orName);
 
 	nv_output->type = OUTPUT_ANALOG;
-	nv_output->or = or;
+	nv_output->output_resource = or;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
 	output->doubleScanAllowed = TRUE;
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 820dd6e..726e2be 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -5,7 +5,7 @@
 #include "nv_type.h"
 
 typedef struct NV50OutputPrivRec {
-    ORNum or;
+    uint8_t output_resource;
     NVOutputType type;
     DisplayModePtr nativeMode;
     enum scaling_modes scale;
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 414af8d..03a39d1 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -38,7 +38,7 @@ NV50SorSetPClk(xf86OutputPtr output, int pclk)
 	NVPtr pNv = NVPTR(pScrn);
 	const int limit = 165000;
 
-	NVWrite(pNv, 0x00614300 + nv_output->or * 0x800, (pclk > limit) ? 0x101 : 0);
+	NVWrite(pNv, 0x00614300 + nv_output->output_resource * 0x800, (pclk > limit) ? 0x101 : 0);
 }
 
 static void
@@ -49,9 +49,9 @@ NV50SorDPMSSet(xf86OutputPtr output, int mode)
 	NVPtr pNv = NVPTR(pScrn);
 	CARD32 tmp;
 
-	while((NVRead(pNv, 0x0061c004 + nv_output->or * 0x800) & 0x80000000));
+	while((NVRead(pNv, 0x0061c004 + nv_output->output_resource * 0x800) & 0x80000000));
 
-	tmp = NVRead(pNv, 0x0061c004 + nv_output->or * 0x800);
+	tmp = NVRead(pNv, 0x0061c004 + nv_output->output_resource * 0x800);
 	tmp |= 0x80000000;
 
 	if(mode == DPMSModeOn)
@@ -59,8 +59,8 @@ NV50SorDPMSSet(xf86OutputPtr output, int mode)
 	else
 		tmp &= ~1;
 
-	NVWrite(pNv, 0x0061c004 + nv_output->or * 0x800, tmp);
-	while((NVRead(pNv, 0x0061c030 + nv_output->or * 0x800) & 0x10000000));
+	NVWrite(pNv, 0x0061c004 + nv_output->output_resource * 0x800, tmp);
+	while((NVRead(pNv, 0x0061c030 + nv_output->output_resource * 0x800) & 0x10000000));
 }
 
 static int
@@ -93,7 +93,7 @@ NV50SorModeSet(xf86OutputPtr output, DisplayModePtr mode,
 {
 	ScrnInfoPtr pScrn = output->scrn;
 	NV50OutputPrivPtr nv_output = output->driver_private;
-	const int sorOff = 0x40 * nv_output->or;
+	const int sorOff = 0x40 * nv_output->output_resource;
 	CARD32 type;
 
 	if(!adjusted_mode) {
@@ -501,17 +501,17 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 
 	output = xf86OutputCreate(pScrn, funcs, orName);
 
-	nv_output->or = or;
+	nv_output->output_resource = or;
 	nv_output->type = type;
 	output->driver_private = nv_output;
 	output->interlaceAllowed = TRUE;
 	output->doubleScanAllowed = TRUE;
 
 	if (type != OUTPUT_LVDS) {
-		NVWrite(pNv, 0x0061c00c + nv_output->or * 0x800, 0x03010700);
-		NVWrite(pNv, 0x0061c010 + nv_output->or * 0x800, 0x0000152f);
-		NVWrite(pNv, 0x0061c014 + nv_output->or * 0x800, 0x00000000);
-		NVWrite(pNv, 0x0061c018 + nv_output->or * 0x800, 0x00245af8);
+		NVWrite(pNv, 0x0061c00c + nv_output->output_resource * 0x800, 0x03010700);
+		NVWrite(pNv, 0x0061c010 + nv_output->output_resource * 0x800, 0x0000152f);
+		NVWrite(pNv, 0x0061c014 + nv_output->output_resource * 0x800, 0x00000000);
+		NVWrite(pNv, 0x0061c018 + nv_output->output_resource * 0x800, 0x00245af8);
 	}
 
 	return output;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: 0010-NV50-Rename-nativeMode.patch --]
[-- Type: text/x-patch; name=0010-NV50-Rename-nativeMode.patch, Size: 3803 bytes --]

From 9bc9070b552ea311a6b7d7dd9bcedd0365fa9feb Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 23:06:16 +0100
Subject: [PATCH] NV50: Rename nativeMode

---
 src/nv50_output.h |    2 +-
 src/nv50_sor.c    |   22 +++++++++++-----------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/nv50_output.h b/src/nv50_output.h
index 726e2be..a628a1b 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -7,7 +7,7 @@
 typedef struct NV50OutputPrivRec {
     uint8_t output_resource;
     NVOutputType type;
-    DisplayModePtr nativeMode;
+    DisplayModePtr native_mode;
     enum scaling_modes scale;
 
     I2CBusPtr pDDCBus;
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 03a39d1..1237d98 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -78,7 +78,7 @@ static int
 NV50LVDSModeValid(xf86OutputPtr output, DisplayModePtr mode)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
-	DisplayModePtr native = nv_output->nativeMode;
+	DisplayModePtr native = nv_output->native_mode;
 
 	// Ignore modes larger than the native res.
 	if (mode->HDisplay > native->HDisplay || mode->VDisplay > native->VDisplay)
@@ -157,7 +157,7 @@ NV50SorDestroy(xf86OutputPtr output)
 
 	NV50OutputDestroy(output);
 
-	xf86DeleteMode(&nv_output->nativeMode, nv_output->nativeMode);
+	xf86DeleteMode(&nv_output->native_mode, nv_output->native_mode);
 
 	xfree(output->driver_private);
 	output->driver_private = NULL;
@@ -191,7 +191,7 @@ NV50SorModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 		 DisplayModePtr adjusted_mode)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
-	DisplayModePtr native = nv_output->nativeMode;
+	DisplayModePtr native = nv_output->native_mode;
 
 	if(native && nv_output->scale != SCALE_PANEL) {
 		NV50SorSetModeBackend(adjusted_mode, native);
@@ -210,7 +210,7 @@ NV50SorTMDSModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 	NV50OutputPrivPtr nv_output = output->driver_private;
 	DisplayModePtr modes = output->probed_modes;
 
-	xf86DeleteMode(&nv_output->nativeMode, nv_output->nativeMode);
+	xf86DeleteMode(&nv_output->native_mode, nv_output->native_mode);
 
 	if(modes) {
 		// Find the preferred mode and use that as the "native" mode.
@@ -235,8 +235,8 @@ NV50SorTMDSModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 				output->name, mode->name);
 		}
 
-		nv_output->nativeMode = xf86DuplicateMode(mode);
-		NV50CrtcDoModeFixup(nv_output->nativeMode, mode);
+		nv_output->native_mode = xf86DuplicateMode(mode);
+		NV50CrtcDoModeFixup(nv_output->native_mode, mode);
 	}
 
 	return NV50SorModeFixup(output, mode, adjusted_mode);
@@ -246,7 +246,7 @@ static DisplayModePtr
 NV50SorGetLVDSModes(xf86OutputPtr output)
 {
 	NV50OutputPrivPtr nv_output = output->driver_private;
-	return xf86DuplicateMode(nv_output->nativeMode);
+	return xf86DuplicateMode(nv_output->native_mode);
 }
 
 #define MAKE_ATOM(a) MakeAtom((a), sizeof(a) - 1, TRUE);
@@ -482,9 +482,9 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 		strcpy(orName, "LVDS");
 		funcs = &NV50SorLVDSOutputFuncs;
 
-		nv_output->nativeMode = GetLVDSNativeMode(pScrn);
+		nv_output->native_mode = GetLVDSNativeMode(pScrn);
 
-		if(!nv_output->nativeMode) {
+		if(!nv_output->native_mode) {
 			xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 				"Failed to find LVDS native mode\n");
 			xfree(nv_output);
@@ -492,8 +492,8 @@ NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 		}
 
 		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%s native size %dx%d\n",
-			orName, nv_output->nativeMode->HDisplay,
-			nv_output->nativeMode->VDisplay);
+			orName, nv_output->native_mode->HDisplay,
+			nv_output->native_mode->VDisplay);
 	} else {
 		snprintf(orName, 5, "DVI%d", or);
 		funcs = &NV50SorTMDSOutputFuncs;
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: 0011-NV50-rename-scale-to-scaling_mode.patch --]
[-- Type: text/x-patch; name=0011-NV50-rename-scale-to-scaling_mode.patch, Size: 3261 bytes --]

From 7288c0150b3879ea5b289ff57a13a27893deb648 Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 23:09:19 +0100
Subject: [PATCH] NV50: rename scale to scaling_mode

---
 src/nv50_output.c |    6 +++---
 src/nv50_output.h |    2 +-
 src/nv50_sor.c    |   10 +++++-----
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/nv50_output.c b/src/nv50_output.c
index bdcbd15..72d6660 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -285,13 +285,13 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 			NV50OutputPrivPtr nv_output = dac->driver_private;
 
 			nv_output->pDDCBus = i2c;
-			nv_output->scale = SCALE_PANEL;
+			nv_output->scaling_mode = SCALE_PANEL;
 		}
 		if (sor) {
 			NV50OutputPrivPtr nv_output = sor->driver_private;
 
 			nv_output->pDDCBus = i2c;
-			nv_output->scale = SCALE_ASPECT;
+			nv_output->scaling_mode = SCALE_ASPECT;
 		}
 	}
 
@@ -299,7 +299,7 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 		xf86OutputPtr lvds = NV50CreateSor(pScrn, pNv->lvds.or, OUTPUT_LVDS);
 		NV50OutputPrivPtr nv_output = lvds->driver_private;
 
-		nv_output->scale = SCALE_ASPECT;
+		nv_output->scaling_mode = SCALE_ASPECT;
 	}
 
 	/* For each output, set the crtc and clone masks */
diff --git a/src/nv50_output.h b/src/nv50_output.h
index a628a1b..0155037 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -8,7 +8,7 @@ typedef struct NV50OutputPrivRec {
     uint8_t output_resource;
     NVOutputType type;
     DisplayModePtr native_mode;
-    enum scaling_modes scale;
+    uint8_t scaling_mode;
 
     I2CBusPtr pDDCBus;
 } NV50OutputPrivRec, *NV50OutputPrivPtr;
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index 1237d98..fd6b37f 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -121,7 +121,7 @@ NV50SorModeSet(xf86OutputPtr output, DisplayModePtr mode,
 		((adjusted_mode->Flags & V_NHSYNC) ? 0x1000 : 0) |
 		((adjusted_mode->Flags & V_NVSYNC) ? 0x2000 : 0));
 
-	NV50CrtcSetScale(output->crtc, adjusted_mode, nv_output->scale);
+	NV50CrtcSetScale(output->crtc, adjusted_mode, nv_output->scaling_mode);
 }
 
 static xf86OutputStatus
@@ -193,7 +193,7 @@ NV50SorModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 	NV50OutputPrivPtr nv_output = output->driver_private;
 	DisplayModePtr native = nv_output->native_mode;
 
-	if(native && nv_output->scale != SCALE_PANEL) {
+	if(native && nv_output->scaling_mode != SCALE_PANEL) {
 		NV50SorSetModeBackend(adjusted_mode, native);
 		// This mode is already "fixed"
 		NV50CrtcSkipModeFixup(output->crtc);
@@ -363,8 +363,8 @@ NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 			// LVDS requires scaling
 			return FALSE;
 
-		oldScale = nv_output->scale;
-		nv_output->scale = scale;
+		oldScale = nv_output->scaling_mode;
+		nv_output->scaling_mode = scale;
 		if (output->crtc) {
 			xf86CrtcPtr crtc = output->crtc;
 
@@ -375,7 +375,7 @@ NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 						modes[i].name, output->name);
 
 				// Restore old scale and try again.
-				nv_output->scale = oldScale;
+				nv_output->scaling_mode = oldScale;
 				if (!xf86CrtcSetMode(crtc, &crtc->desiredMode,
 							crtc->desiredRotation, crtc->desiredX,
 							crtc->desiredY)) {
-- 
1.5.4.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #13: 0012-NV50-Merge-the-two-output-private-structs.patch --]
[-- Type: text/x-patch; name=0012-NV50-Merge-the-two-output-private-structs.patch, Size: 8365 bytes --]

From 5590c2d14c885d556f1b05654dd2ab70df10a22f Mon Sep 17 00:00:00 2001
From: Maarten Maathuis <madman2003@gmail.com>
Date: Tue, 11 Mar 2008 23:15:11 +0100
Subject: [PATCH] NV50: Merge the two output private structs.

---
 src/nv50_dac.c    |   12 ++++++------
 src/nv50_output.c |   10 +++++-----
 src/nv50_output.h |    9 ---------
 src/nv50_sor.c    |   22 +++++++++++-----------
 4 files changed, 22 insertions(+), 31 deletions(-)

diff --git a/src/nv50_dac.c b/src/nv50_dac.c
index dcbc157..f7d7518 100644
--- a/src/nv50_dac.c
+++ b/src/nv50_dac.c
@@ -33,7 +33,7 @@
 void
 NV50DacSetPClk(xf86OutputPtr output, int pclk)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
 	NVWrite(pNv, 0x00614280 + nv_output->output_resource * 0x800, 0);
@@ -43,7 +43,7 @@ static void
 NV50DacDPMSSet(xf86OutputPtr output, int mode)
 {
 	CARD32 tmp;
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
 
@@ -83,7 +83,7 @@ NV50DacModeSet(xf86OutputPtr output, DisplayModePtr mode,
 		DisplayModePtr adjusted_mode)
 {
 	ScrnInfoPtr pScrn = output->scrn;
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	const int dacOff = 0x80 * nv_output->output_resource;
 
 	if(!adjusted_mode) {
@@ -112,7 +112,7 @@ NV50DacModeSet(xf86OutputPtr output, DisplayModePtr mode,
 static xf86OutputStatus
 NV50DacDetect(xf86OutputPtr output)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	xf86MonPtr ddc_mon;
 
 	if (nv_output->pDDCBus == NULL)
@@ -133,7 +133,7 @@ NV50DacLoadDetect(xf86OutputPtr output)
 {
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	const int scrnIndex = pScrn->scrnIndex;
 	int sigstate;
 	CARD32 load, tmp, tmp2;
@@ -191,7 +191,7 @@ static const xf86OutputFuncsRec NV50DacOutputFuncs = {
 xf86OutputPtr
 NV50CreateDac(ScrnInfoPtr pScrn, ORNum or)
 {
-	NV50OutputPrivPtr nv_output = xnfcalloc(sizeof(*nv_output), 1);
+	NVOutputPrivatePtr nv_output = xnfcalloc(sizeof(*nv_output), 1);
 	xf86OutputPtr output;
 	char orName[5];
 
diff --git a/src/nv50_output.c b/src/nv50_output.c
index 72d6660..fa63b21 100644
--- a/src/nv50_output.c
+++ b/src/nv50_output.c
@@ -170,7 +170,7 @@ NV50I2CInit(ScrnInfoPtr pScrn, const char *name, const int port)
 void
 NV50OutputSetPClk(xf86OutputPtr output, int pclk)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 
 	if (nv_output->type == OUTPUT_TMDS)
 		NV50SorSetPClk(output, pclk);
@@ -238,7 +238,7 @@ NV50OutputGetDDCModes(xf86OutputPtr output)
 void
 NV50OutputDestroy(xf86OutputPtr output)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 
 	if (nv_output->pDDCBus)
 		xf86DestroyI2CBusRec(nv_output->pDDCBus, TRUE, TRUE);
@@ -282,13 +282,13 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 			sor = NV50CreateSor(pScrn, pNv->i2cMap[i].sor, OUTPUT_TMDS);
 
 		if (dac) {
-			NV50OutputPrivPtr nv_output = dac->driver_private;
+			NVOutputPrivatePtr nv_output = dac->driver_private;
 
 			nv_output->pDDCBus = i2c;
 			nv_output->scaling_mode = SCALE_PANEL;
 		}
 		if (sor) {
-			NV50OutputPrivPtr nv_output = sor->driver_private;
+			NVOutputPrivatePtr nv_output = sor->driver_private;
 
 			nv_output->pDDCBus = i2c;
 			nv_output->scaling_mode = SCALE_ASPECT;
@@ -297,7 +297,7 @@ NV50CreateOutputs(ScrnInfoPtr pScrn)
 
 	if (pNv->lvds.present) {
 		xf86OutputPtr lvds = NV50CreateSor(pScrn, pNv->lvds.or, OUTPUT_LVDS);
-		NV50OutputPrivPtr nv_output = lvds->driver_private;
+		NVOutputPrivatePtr nv_output = lvds->driver_private;
 
 		nv_output->scaling_mode = SCALE_ASPECT;
 	}
diff --git a/src/nv50_output.h b/src/nv50_output.h
index 0155037..53b913f 100644
--- a/src/nv50_output.h
+++ b/src/nv50_output.h
@@ -4,15 +4,6 @@
 #include "nv50_display.h"
 #include "nv_type.h"
 
-typedef struct NV50OutputPrivRec {
-    uint8_t output_resource;
-    NVOutputType type;
-    DisplayModePtr native_mode;
-    uint8_t scaling_mode;
-
-    I2CBusPtr pDDCBus;
-} NV50OutputPrivRec, *NV50OutputPrivPtr;
-
 void NV50OutputSetPClk(xf86OutputPtr, int pclk);
 int NV50OutputModeValid(xf86OutputPtr, DisplayModePtr);
 void NV50OutputPrepare(xf86OutputPtr);
diff --git a/src/nv50_sor.c b/src/nv50_sor.c
index fd6b37f..4833909 100644
--- a/src/nv50_sor.c
+++ b/src/nv50_sor.c
@@ -33,7 +33,7 @@
 void
 NV50SorSetPClk(xf86OutputPtr output, int pclk)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
 	const int limit = 165000;
@@ -44,7 +44,7 @@ NV50SorSetPClk(xf86OutputPtr output, int pclk)
 static void
 NV50SorDPMSSet(xf86OutputPtr output, int mode)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	ScrnInfoPtr pScrn = output->scrn;
 	NVPtr pNv = NVPTR(pScrn);
 	CARD32 tmp;
@@ -77,7 +77,7 @@ NV50TMDSModeValid(xf86OutputPtr output, DisplayModePtr mode)
 static int
 NV50LVDSModeValid(xf86OutputPtr output, DisplayModePtr mode)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	DisplayModePtr native = nv_output->native_mode;
 
 	// Ignore modes larger than the native res.
@@ -92,7 +92,7 @@ NV50SorModeSet(xf86OutputPtr output, DisplayModePtr mode,
 		DisplayModePtr adjusted_mode)
 {
 	ScrnInfoPtr pScrn = output->scrn;
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	const int sorOff = 0x40 * nv_output->output_resource;
 	CARD32 type;
 
@@ -127,7 +127,7 @@ NV50SorModeSet(xf86OutputPtr output, DisplayModePtr mode,
 static xf86OutputStatus
 NV50SorDetect(xf86OutputPtr output)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	xf86MonPtr ddc_mon;
 
 	if (nv_output->pDDCBus == NULL)
@@ -153,7 +153,7 @@ NV50SorLVDSDetect(xf86OutputPtr output)
 static void
 NV50SorDestroy(xf86OutputPtr output)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 
 	NV50OutputDestroy(output);
 
@@ -190,7 +190,7 @@ static Bool
 NV50SorModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 		 DisplayModePtr adjusted_mode)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	DisplayModePtr native = nv_output->native_mode;
 
 	if(native && nv_output->scaling_mode != SCALE_PANEL) {
@@ -207,7 +207,7 @@ NV50SorTMDSModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 			DisplayModePtr adjusted_mode)
 {
 	int scrnIndex = output->scrn->scrnIndex;
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	DisplayModePtr modes = output->probed_modes;
 
 	xf86DeleteMode(&nv_output->native_mode, nv_output->native_mode);
@@ -245,7 +245,7 @@ NV50SorTMDSModeFixup(xf86OutputPtr output, DisplayModePtr mode,
 static DisplayModePtr
 NV50SorGetLVDSModes(xf86OutputPtr output)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 	return xf86DuplicateMode(nv_output->native_mode);
 }
 
@@ -315,7 +315,7 @@ NV50SorCreateResources(xf86OutputPtr output)
 static Bool
 NV50SorSetProperty(xf86OutputPtr output, Atom prop, RRPropertyValuePtr val)
 {
-	NV50OutputPrivPtr nv_output = output->driver_private;
+	NVOutputPrivatePtr nv_output = output->driver_private;
 
 	if(prop == properties.dither.atom) {
 		INT32 i;
@@ -469,7 +469,7 @@ GetLVDSNativeMode(ScrnInfoPtr pScrn)
 xf86OutputPtr
 NV50CreateSor(ScrnInfoPtr pScrn, ORNum or, NVOutputType type)
 {
-	NV50OutputPrivPtr nv_output = xnfcalloc(sizeof(*nv_output), 1);
+	NVOutputPrivatePtr nv_output = xnfcalloc(sizeof(*nv_output), 1);
 	NVPtr pNv = NVPTR(pScrn);
 	xf86OutputPtr output;
 	char orName[5];
-- 
1.5.4.3


[-- Attachment #14: Type: text/plain, Size: 181 bytes --]

_______________________________________________
Nouveau mailing list
Nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-03-13 17:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-11 22:32 NV50: Some patches that need testing Maarten Maathuis
     [not found] ` <6d4bc9fc0803111532j6fe3cc8m9eaf8ba6eeb1b86f-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-03-11 22:33   ` Maarten Maathuis
2008-03-12 20:18   ` KoalaBR
     [not found]     ` <200803122118.25094.koala_br-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
2008-03-12 22:19       ` Maarten Maathuis
     [not found]         ` <6d4bc9fc0803121519j628450cfn625ef2a5fef8b9d4-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-03-13 17:50           ` Maarten Maathuis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.