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