xf86-video-intel: Branch 'modesetting-airlied' - src/common.h src/i810_reg.h src/i830_driver.c src/i830_modes.c src/i830_raw.c src/i830_sdvo.c src/Makefile.am

Keith Packard keithp at kemper.freedesktop.org
Sun Jun 4 10:21:02 EEST 2006


 src/Makefile.am   |    2 ++
 src/common.h      |    2 +-
 src/i810_reg.h    |   13 +++++++++++++
 src/i830_driver.c |    2 ++
 src/i830_modes.c  |   11 ++++++++---
 src/i830_raw.c    |    3 +--
 src/i830_sdvo.c   |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 78 insertions(+), 6 deletions(-)

New commits:
diff-tree bb5c35484154494439288f87ca3ed6fd7f1207c1 (from 034474e3112086dfb6cf79bfb4e5e29369fe1ea1)
Author: Keith Packard <keithp at mactel.(none)>
Date:   Sun Jun 4 00:16:39 2006 -0700

    Dump out registers so we can diff against modesetting branch

diff --git a/src/Makefile.am b/src/Makefile.am
index 6dc3d57..b4dc72b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -46,6 +46,8 @@ i810_drv_la_SOURCES = \
          i830_accel.c \
          i830_common.h \
          i830_cursor.c \
+	 i830_debug.c \
+	 i830_debug.h \
          i830_dga.c \
          i830_driver.c \
          i830.h \
diff --git a/src/common.h b/src/common.h
index 316be13..18f67ff 100644
--- a/src/common.h
+++ b/src/common.h
@@ -1,4 +1,4 @@
-
+#define I830DEBUG
 /**************************************************************************
 
 Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
diff --git a/src/i810_reg.h b/src/i810_reg.h
index 6b8299d..a3cd95d 100644
--- a/src/i810_reg.h
+++ b/src/i810_reg.h
@@ -711,6 +711,19 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
 #define FP_M1_DIVISOR_SHIFT		8
 #define FP_M2_DIVISOR_SHIFT		0
 
+#define PORT_HOTPLUG_EN		0x61110
+# define SDVOB_HOTPLUG_INT_EN			(1 << 26)
+# define SDVOC_HOTPLUG_INT_EN			(1 << 25)
+# define TV_HOTPLUG_INT_EN			(1 << 18)
+# define CRT_HOTPLUG_INT_EN			(1 << 9)
+# define CRT_HOTPLUG_FORCE_DETECT		(1 << 3)
+
+#define PORT_HOTPLUG_STAT	0x61114
+# define CRT_HOTPLUG_INT_STATUS			(1 << 11)
+# define TV_HOTPLUG_INT_STATUS			(1 << 10)
+# define SDVOC_HOTPLUG_INT_STATUS		(1 << 7)
+# define SDVOB_HOTPLUG_INT_STATUS		(1 << 6)
+
 #define I830_HTOTAL_MASK 	0xfff0000
 #define I830_HACTIVE_MASK	0x7ff
 
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 75e5b65..3d518fd 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -184,6 +184,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "vbeModes.h"
 #include "shadow.h"
 #include "i830.h"
+#include "i830_debug.h"
 
 #ifdef XF86DRI
 #include "dri.h"
@@ -4772,6 +4773,7 @@ I830VESASetMode(ScrnInfoPtr pScrn, Displ
    }
 #endif
 
+    i830DumpRegs (pScrn);
 #if MODESWITCH_RESET_STATE
    ResetState(pScrn, TRUE);
    SetHWOperatingState(pScrn);
diff --git a/src/i830_modes.c b/src/i830_modes.c
index 8323acd..b866675 100644
--- a/src/i830_modes.c
+++ b/src/i830_modes.c
@@ -895,8 +895,10 @@ DisplayModePtr I830xf86DDCModes(ScrnInfo
 	    count++;
 
 	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		       "Valid Mode from Detailed timing table: %s\n",
-		       new->name);
+		       "Valid Mode from Detailed timing table: %s (ht %d hss %d hse %d vt %d vss %d vse %d)\n",
+		       new->name,
+		       new->HTotal, new->HSyncStart, new->HSyncEnd,
+		       new->VTotal, new->VSyncStart, new->VSyncEnd);
 
 	    I830xf86SortModes(&new, &first, &last);
 	}
@@ -912,8 +914,11 @@ DisplayModePtr I830xf86DDCModes(ScrnInfo
 		(ddc->timings2[j].vsize == p->VDisplay)) {
 		float  refresh =
 		    (float)p->Clock * 1000.0 / p->HTotal / p->VTotal;
+		float err = (float)ddc->timings2[j].refresh - refresh;
 
-		if (abs((float)ddc->timings2[j].refresh - refresh) < 1.0) {
+		if (err < 0) err = -err;
+
+		if (err < 1.0) {
 		    /* Is this good enough? */
 		    new = xnfcalloc(1, sizeof (DisplayModeRec));
 		    memcpy(new, p, sizeof(DisplayModeRec));
diff --git a/src/i830_raw.c b/src/i830_raw.c
index bd88004..201f734 100644
--- a/src/i830_raw.c
+++ b/src/i830_raw.c
@@ -541,8 +541,7 @@ I830RawSetHw(ScrnInfoPtr pScrn, DisplayM
     return FALSE;
   
   *ht = (htotal << HTOTAL_SHIFT) | (hactive << HACTIVE_SHIFT);
-  *hb = (hblank_start << HBLANKSTART_SHIFT) |
-    (hblank_end << HSYNCEND_SHIFT);
+  *hb = (hblank_start << HBLANKSTART_SHIFT) | (hblank_end << HBLANKEND_SHIFT);
   *hs = (hsync_start << HSYNCSTART_SHIFT) | (hsync_end << HSYNCEND_SHIFT);
   
   *vt = (vtotal << VTOTAL_SHIFT) | (vactive << VACTIVE_SHIFT);
diff --git a/src/i830_sdvo.c b/src/i830_sdvo.c
index 726f28f..2a31c5a 100644
--- a/src/i830_sdvo.c
+++ b/src/i830_sdvo.c
@@ -857,3 +857,54 @@ I830SDVOInit(ScrnInfoPtr pScrn, int outp
 
   return sdvo;
 }
+
+
+static void
+I830DumpSDVOCmd (I830SDVOPtr s, int opcode)
+{
+    memset (s->sdvo_regs, 0, sizeof (s->sdvo_regs));
+    s->sdvo_regs[SDVO_I2C_OPCODE] = opcode;
+    I830SDVOWriteOutputs (s, 0);
+    I830SDVOReadInputRegs (s);
+}
+
+static void
+I830DumpOneSDVO (I830SDVOPtr s)
+{
+    ErrorF ("Dump %s\n", s->d.DevName);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_DEVICE_CAPS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_FIRMWARE_REV);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_TRAINED_INPUTS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_ACTIVE_OUTPUTS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_IN_OUT_MAP);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_ATTACHED_DISPLAYS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_HOT_PLUG_SUPPORT);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_ACTIVE_HOT_PLUG);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_INTR_EVENT_SOURCE);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_INPUT_TIMINGS_PART1);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_INPUT_TIMINGS_PART2);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_OUTPUT_TIMINGS_PART1);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_OUTPUT_TIMINGS_PART2);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART1);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_PREFERRED_INPUT_TIMING_PART2);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_INPUT_PIXEL_CLOCK_RANGE);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_OUTPUT_PIXEL_CLOCK_RANGE);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_SUPPORTED_CLOCK_RATE_MULTS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_CLOCK_RATE_MULT);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_SUPPORTED_TV_FORMATS);
+    I830DumpSDVOCmd (s, SDVO_CMD_GET_TV_FORMAT);
+}
+		 
+void
+I830DumpSDVO (ScrnInfoPtr pScrn)
+{
+    I830Ptr pI830 = I830PTR(pScrn);
+    I830SDVOPtr	s;
+    int	i;
+
+    for (i = 0; i < 4; i++) {
+	s = pI830->output[i].sdvo_drv;
+	if (s)
+	    I830DumpOneSDVO (s);
+    }
+}



More information about the xorg-commit mailing list