[Xorg-driver-geode] looking at wide mode support for GeodeLX (success)

Bart Trojanowski bart at jukie.net
Sat Mar 1 09:01:18 PST 2008


Hi again,

* Bart Trojanowski <bart at jukie.net> [080229 13:35]:
> Earlier, Jordan presented a patch:
> 
> http://lists.x.org/archives/xorg-driver-geode/2008-February/000211.html
> 
> I tested it with on Gutsy (xorg-core 1.3.0) and found that it was
> skipping most of the modes in LXValidMode() because it was not in the
> Cimarron table.

I am attaching the original patch plus a small logic correction..

-    if ((pMode->type & M_T_BUILTIN) || (pMode->type && M_T_DEFAULT)) {
+    if ((pMode->type & M_T_BUILTIN) || (pMode->type & M_T_DEFAULT)) {

... I read through the patch a few times and didn't spot it until I
started looking at the values of mode->type.

I don't have a way to test this with a PANEL connected.  But I can
confirm that wide modes work.  I am happy to sign off on the patch.

-Bart

-- 
				WebSig: http://www.jukie.net/~bart/sig/
-------------- next part --------------
From 62076bb36c7e3d521c7e5b21f79b50571ef45201 Mon Sep 17 00:00:00 2001
From: Bart Trojanowski <bart at jukie.net>
Date: Wed, 13 Feb 2008 10:43:26 -0500
Subject: [PATCH] ddc patch from Jordan

---
 src/amd_gx_driver.c |    9 +++++----
 src/amd_lx_driver.c |   21 +++++++++++++++------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/amd_gx_driver.c b/src/amd_gx_driver.c
index 177b111..ead492f 100644
--- a/src/amd_gx_driver.c
+++ b/src/amd_gx_driver.c
@@ -783,7 +783,9 @@ GXSetVideoMode(ScrnInfoPtr pScrni, DisplayModePtr pMode)
 
   /* Only use the panel mode for built in modes */
 
-  if ((pMode->type && pMode->type != M_T_USERDEF) && pGeode->Panel) {
+ if ((pMode->type & M_T_BUILTIN) || (pMode->type & M_T_DEFAULT)
+	&& pGeode->Panel) {
+
     GFX(set_fixed_timings(pGeode->PanelX, pGeode->PanelY,
 			  pMode->CrtcHDisplay, pMode->CrtcVDisplay,
 			  pScrni->bitsPerPixel));
@@ -1390,10 +1392,9 @@ GXValidMode(int scrnIndex, DisplayModePtr pMode, Bool Verbose, int flags)
   GeodeRec *pGeode = GEODEPTR(pScrni);
   int p, ret;
 
-  /* Not sure if this is an X bug or not - but on my current build,
-   * user defined modes pass a type of 0 */
+  /* Use the durango lookup for builtin or default modes only */
 
-  if (pMode->type && pMode->type != M_T_USERDEF) {
+  if ((pMode->type & M_T_BUILTIN) || (pMode->type & M_T_DEFAULT)) {
 
     if (pGeode->Panel) {
       if (pMode->CrtcHDisplay > pGeode->PanelX ||
diff --git a/src/amd_lx_driver.c b/src/amd_lx_driver.c
index 9abbd5f..c779ac1 100644
--- a/src/amd_lx_driver.c
+++ b/src/amd_lx_driver.c
@@ -845,9 +845,10 @@ LXSetVideoMode(ScrnInfoPtr pScrni, DisplayModePtr pMode)
     lx_disable_dac_power(pScrni, DF_CRT_DISABLE);
     vg_set_compression_enable(0);
 
-    if (!pMode->type || pMode->type == M_T_USERDEF) 
-      lx_set_custom_mode(pGeode, pMode, pScrni->bitsPerPixel);
-    else {
+    /* If the mode is a default one, then set the mode with the Cimarron
+     * tables */
+
+    if ((pMode->type & M_T_BUILTIN) || (pMode->type & M_T_DEFAULT)) {
       if (pMode->Flags & V_NHSYNC)
 	flags |= VG_MODEFLAG_NEG_HSYNC;
       if (pMode->Flags & V_NVSYNC)
@@ -878,8 +879,14 @@ LXSetVideoMode(ScrnInfoPtr pScrni, DisplayModePtr pMode)
 			    pScrni->bitsPerPixel, GeodeGetRefreshRate(pMode), 
 			    0);
       }
-    } 
-   
+    }
+    else {
+	/* For anything other then a default mode - use the passed in
+	 * timings */
+
+	lx_set_custom_mode(pGeode, pMode, pScrni->bitsPerPixel);
+    }
+
     if (pGeode->Output & OUTPUT_PANEL)
       df_set_output_path((pGeode->Output & OUTPUT_CRT) ? DF_DISPLAY_CRT_FP : DF_DISPLAY_FP);
     else
@@ -1386,7 +1393,9 @@ LXValidMode(int scrnIndex, DisplayModePtr pMode, Bool Verbose, int flags)
 
     memset(&vgQueryMode, 0, sizeof(vgQueryMode));
 
-    if (pMode->type && pMode->type != M_T_USERDEF) {
+    /* For builtin and default modes, try to look up the mode in Cimarron */
+
+    if ((pMode->type & M_T_BUILTIN) || (pMode->type && M_T_DEFAULT)) {
       
       if (pGeode->Output & OUTPUT_PANEL) {
 
-- 
1.5.3.8


From 17d1a6a83aab541a5d627ceee526b1d89c0929c0 Mon Sep 17 00:00:00 2001
From: Bart Trojanowski <bart at jukie.net>
Date: Sat, 1 Mar 2008 11:38:57 -0500
Subject: [PATCH] fix logic bug in LXValidMode()

---
 src/amd_lx_driver.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/amd_lx_driver.c b/src/amd_lx_driver.c
index c779ac1..f125995 100644
--- a/src/amd_lx_driver.c
+++ b/src/amd_lx_driver.c
@@ -1395,7 +1395,7 @@ LXValidMode(int scrnIndex, DisplayModePtr pMode, Bool Verbose, int flags)
 
     /* For builtin and default modes, try to look up the mode in Cimarron */
 
-    if ((pMode->type & M_T_BUILTIN) || (pMode->type && M_T_DEFAULT)) {
+    if ((pMode->type & M_T_BUILTIN) || (pMode->type & M_T_DEFAULT)) {
       
       if (pGeode->Output & OUTPUT_PANEL) {
 
-- 
1.5.3.8



More information about the xorg mailing list