xf86-video-intel: Branch 'modesetting-airlied' - 7 commits - src/ch7xxx/ch7xxx.c src/ch7xxx/ch7xxx_reg.h src/common.h src/i2c_vid.h src/i810_reg.h src/i830_driver.c src/i830_modes.c src/i830_raw.c src/i830_sdvo.c src/Makefile.am src/sil164/sil164.c

Dave Airlie airlied at kemper.freedesktop.org
Wed Jul 5 09:30:26 EEST 2006


 src/Makefile.am         |    2 
 src/ch7xxx/ch7xxx.c     |  113 ++++++++++++++++++++++++++++++++++++++++--------
 src/ch7xxx/ch7xxx_reg.h |   50 +++++++++++++++++++--
 src/common.h            |    2 
 src/i2c_vid.h           |    4 -
 src/i810_reg.h          |   14 -----
 src/i830_driver.c       |   18 +++----
 src/i830_modes.c        |   11 +---
 src/i830_raw.c          |   38 ++++++++++++----
 src/i830_sdvo.c         |   51 ---------------------
 src/sil164/sil164.c     |    2 
 11 files changed, 186 insertions(+), 119 deletions(-)

New commits:
diff-tree 5dff1a1e20e1d428a48cec03e872df2b1b4ea530 (from 29612720709bef2f416b417b227afdab8c686563)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:26:44 2006 +1000

    raw modesetting callouts for i2c
    
    Add callouts for DVO code for raw modesetting

diff --git a/src/i830_raw.c b/src/i830_raw.c
index bd88004..f4af7f6 100644
--- a/src/i830_raw.c
+++ b/src/i830_raw.c
@@ -423,16 +423,18 @@ I830RawSetHw(ScrnInfoPtr pScrn, DisplayM
   *dpll &= ~DPLL_2X_CLOCK_ENABLE;
   for (i=0; i<pI830->num_outputs; i++)
   {
-    if (pI830->output[i].sdvo_drv)
+    if (pI830->output[i].sdvo_drv || pI830->output[i].i2c_drv)
       *dpll |= DPLL_2X_CLOCK_ENABLE;
   }
-  /* leave these alone for now */
-  if (pMode->PrivFlags & I830_MFLAG_DOUBLE)
-    new_dvo = 0x81c80080;
-  else
-    new_dvo = 0x80480080;
 
   if (IS_I9XX(pI830)) {
+    /* leave these alone for now */
+    if (pMode->PrivFlags & I830_MFLAG_DOUBLE)
+      new_dvo = 0x81c80080;
+    else
+      new_dvo = 0x80480080;
+
+
     for (i = 0; i < pI830->num_outputs; i++)
     {
       if (pI830->output[i].sdvo_drv)
@@ -448,8 +450,10 @@ I830RawSetHw(ScrnInfoPtr pScrn, DisplayM
       }
     }
   }
-  else
+  else {
+    new_dvo = 0x8000408c;
     hw->dvoc = new_dvo;
+  }
   //  hw->dvob &= ~DVO_ENABLE;
   //hw->dvoc &= ~DVO_ENABLE;
   //  hw->dvoc |= 0x4084 | DVO_ENABLE;
@@ -793,6 +797,12 @@ I830RawSaveState(ScrnInfoPtr pScrn, I830
     hw->swf1x[count++] = INREG(i);
   
   for (i = 0; i < pI830->num_outputs; i++) {
+    if (pI830->output[i].type == I830_OUTPUT_DVO &&
+	pI830->output[i].i2c_drv != NULL)
+    {
+      pI830->output[i].i2c_drv->vid_rec->SaveRegs(pI830->output[i].i2c_drv->devpriv);
+    }
+
     if (pI830->output[i].type == I830_OUTPUT_SDVO &&
 	pI830->output[i].sdvo_drv != NULL)
     {
@@ -821,6 +831,12 @@ I830RawRestoreState(ScrnInfoPtr pScrn, I
   vgaHWLock(hwp);
 
   for (i = 0; i < pI830->num_outputs; i++) {
+    if (pI830->output[i].type == I830_OUTPUT_DVO &&
+	pI830->output[i].i2c_drv != NULL)
+    {
+      pI830->output[i].i2c_drv->vid_rec->RestoreRegs(pI830->output[i].i2c_drv->devpriv);
+    }
+
     if (pI830->output[i].type == I830_OUTPUT_SDVO &&
 	pI830->output[i].sdvo_drv != NULL)
     {
@@ -988,6 +1004,11 @@ I830RawSetMode(ScrnInfoPtr pScrn, Displa
       else
 	      ret = TRUE;
     }
+
+    if (pI830->output[i].i2c_drv)
+    {
+      pI830->output[i].i2c_drv->vid_rec->Mode(pI830->output[i].i2c_drv->devpriv, mode);
+    }
   }
   if (didLock)
     I830DRIUnlock(pScrn);
diff-tree 29612720709bef2f416b417b227afdab8c686563 (from 29329dd5cfd26caa1982e2ab3c2c3a2e4c8c95a8)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:23:12 2006 +1000

    Add support for dumping i2c registers

diff --git a/src/i830_driver.c b/src/i830_driver.c
index 75e5b65..1583d39 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -320,6 +320,8 @@ I830DumpModeDebugInfo(ScrnInfoPtr pScrn)
   CARD32 temp, planeA, planeB;
   planeA = INREG(DSPACNTR);
   planeB = INREG(DSPBCNTR);
+  int i;
+
 #if 1
 
   DR(ADPA);
@@ -467,16 +469,14 @@ I830DumpModeDebugInfo(ScrnInfoPtr pScrn)
 
   DR(0x240c);
 
-#if 0
-  if (pI830->sdvo && pI830->sdvo->found) {
-    I830SDVOWriteCommand10(pI830->sdvo);
-    I830SDVOWriteCommand18(pI830->sdvo);
-    I830SDVOWriteCommand10(pI830->sdvo);
-    I830SDVOWriteCommand19(pI830->sdvo);
-    I830SDVOWriteCommand10(pI830->sdvo);
+  for (i=0; i<pI830->num_outputs; i++) {
+    if (pI830->output[i].type == I830_OUTPUT_DVO &&
+	pI830->output[i].i2c_drv != NULL)
+    {
+      pI830->output[i].i2c_drv->vid_rec->PrintRegs(pI830->output[i].i2c_drv->devpriv);
+    }
   }
 #endif
-#endif
 }
 
 /* XXX Check if this is still needed. */
diff-tree 29329dd5cfd26caa1982e2ab3c2c3a2e4c8c95a8 (from c25f3758ee410a4a3385c6c4ea2b95254f3f43b0)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:22:55 2006 +1000

    i810: add register from intel

diff --git a/src/i810_reg.h b/src/i810_reg.h
index 6b8299d..862ea4c 100644
--- a/src/i810_reg.h
+++ b/src/i810_reg.h
@@ -692,6 +692,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
 #define DPLL_P2_MASK			1
 #define DPLL_P2_SHIFT			23
 #define DPLL_I9XX_P2_SHIFT		24
+#define DPLL_P2_DIVIDE_BY_4			(1 << 23) /* i830, required in DVO non-gang */
 #define DPLL_P1_FORCE_DIV2		(1 << 21)
 #define DPLL_P1_MASK			0x1f
 #define DPLL_P1_SHIFT			16
diff-tree c25f3758ee410a4a3385c6c4ea2b95254f3f43b0 (from 44ec07919183b2dc16aca6d710d0c1f941e006cb)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:22:34 2006 +1000

    i2c_vid: change some prototypes
    
    change some prototypes

diff --git a/src/i2c_vid.h b/src/i2c_vid.h
index 69fa969..fbf7284 100644
--- a/src/i2c_vid.h
+++ b/src/i2c_vid.h
@@ -7,9 +7,9 @@ typedef struct _I830I2CVidOutputRec {
   Bool (*Init)(I2CDevPtr d);
   ModeStatus (*ModeValid)(I2CDevPtr d, DisplayModePtr mode);
   void (*Mode)(I2CDevPtr d, DisplayModePtr mode);
-  void (*Power)(I2CDevPtr d, DisplayModePtr mode);
+  void (*Power)(I2CDevPtr d, Bool On);
   void (*PrintRegs)(I2CDevPtr d);
-  void (*SaveRegs)(I2CDevPtr d);
+  void (*SaveRegs)(void *d);
   void (*RestoreRegs)(I2CDevPtr d);
 } I830I2CVidOutputRec, *I830I2CVidOutputPtr;
 
diff-tree 44ec07919183b2dc16aca6d710d0c1f941e006cb (from dd03e4852c0ff9d23ca7956e92e1bede5bec2365)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:20:55 2006 +1000

    ch7xxx: update ch7xxx driver support
    
    This actually does some stuff with the ch7xxx registers

diff --git a/src/ch7xxx/ch7xxx.c b/src/ch7xxx/ch7xxx.c
index bb902a1..77c49b5 100644
--- a/src/ch7xxx/ch7xxx.c
+++ b/src/ch7xxx/ch7xxx.c
@@ -32,10 +32,20 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
 #include "miscstruct.h"
 #include "xf86i2c.h"
 
+#include <string.h>
+
 #include "../i2c_vid.h"
 #include "ch7xxx.h"
 #include "ch7xxx_reg.h"
 
+static void ch7xxxSaveRegs(void *d);
+
+static CARD8 ch7xxxFreqRegs[][7] =
+  { { 0, 0x23, 0x08, 0x16, 0x30, 0x60, 0x00 },
+    { 0, 0x23, 0x04, 0x26, 0x30, 0x60, 0x00 },
+    { 0, 0x2D, 0x07, 0x26, 0x30, 0xE0, 0x00 } };
+
+
 static Bool ch7xxxReadByte(CH7xxxPtr ch7xxx, int addr, unsigned char *ch)
 {
   if (!xf86I2CReadByte(&(ch7xxx->d), addr, ch)) {
@@ -79,6 +89,7 @@ static void *ch7xxxDetect(I2CBusPtr b, I
   if (!ch7xxxReadByte(ch7xxx, CH7xxx_REG_VID, &ch))
     goto out;
 
+  ErrorF("VID is %02X", ch);
   if (ch!=(CH7xxx_VID & 0xFF))
   {
     xf86DrvMsg(ch7xxx->d.pI2CBus->scrnIndex, X_ERROR, "ch7xxx not detected got %d: from %s Slave %d.\n", ch, ch7xxx->d.pI2CBus->BusName, ch7xxx->d.SlaveAddr);
@@ -89,6 +100,7 @@ static void *ch7xxxDetect(I2CBusPtr b, I
   if (!ch7xxxReadByte(ch7xxx, CH7xxx_REG_DID, &ch))
     goto out;
 
+  ErrorF("DID is %02X", ch);
   if (ch!=(CH7xxx_DID & 0xFF))
   {
     xf86DrvMsg(ch7xxx->d.pI2CBus->scrnIndex, X_ERROR, "ch7xxx not detected got %d: from %s Slave %d.\n", ch, ch7xxx->d.pI2CBus->BusName, ch7xxx->d.SlaveAddr);
@@ -127,7 +139,62 @@ static ModeStatus ch7xxxModeValid(I2CDev
 static void ch7xxxMode(I2CDevPtr d, DisplayModePtr mode)
 {
   CH7xxxPtr ch7xxx = CH7PTR(d);
+  int ret;
+  unsigned char pm, idf;
+  unsigned char tpcp, tpd, tpf, cm;
+  CARD8 *freq_regs;
+  int i;
+  ErrorF("Clock is %d\n", mode->Clock);
+
+  if (mode->Clock < 75000)
+    freq_regs = ch7xxxFreqRegs[0];
+  else if (mode->Clock < 125000)
+    freq_regs = ch7xxxFreqRegs[1];
+  else
+    freq_regs = ch7xxxFreqRegs[2];
+
+  for (i = 0x31; i < 0x37; i++) {
+    ch7xxx->ModeReg.regs[i] = freq_regs[i - 0x31];
+    ch7xxxWriteByte(ch7xxx, i, ch7xxx->ModeReg.regs[i]);
+  }
+    
+#if 0
 
+  xf86DrvMsg(ch7xxx->d.pI2CBus->scrnIndex, X_ERROR, "ch7xxx idf is 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", idf, tpcp, tpd, tpf);
+
+  xf86DrvMsg(ch7xxx->d.pI2CBus->scrnIndex, X_ERROR, "ch7xxx pm is %02X\n", pm);
+
+  if (mode->Clock < 65000) {
+    tpcp = 0x08;
+    tpd = 0x16;
+    tpf = 0x60;
+  } else {
+    tpcp = 0x06;
+    tpd = 0x26;
+    tpf = 0xa0;
+  }
+
+  idf &= ~(CH7xxx_IDF_HSP | CH7xxx_IDF_VSP);
+  if (mode->Flags & V_PHSYNC)
+    idf |= CH7xxx_IDF_HSP;
+
+  if (mode->Flags & V_PVSYNC)
+    idf |= CH7xxx_IDF_HSP;
+  
+  /* setup PM Registers */
+  pm &= ~CH7xxx_PM_FPD;
+  pm |= CH7xxx_PM_DVIL | CH7xxx_PM_DVIP;
+
+  //  cm |= 1;
+
+  ch7xxxWriteByte(ch7xxx, CH7xxx_CM, cm);
+  ch7xxxWriteByte(ch7xxx, CH7xxx_TPCP, tpcp);
+  ch7xxxWriteByte(ch7xxx, CH7xxx_TPD, tpd);
+  ch7xxxWriteByte(ch7xxx, CH7xxx_TPF, tpf);
+  ch7xxxWriteByte(ch7xxx, CH7xxx_TPF, idf);
+  ch7xxxWriteByte(ch7xxx, CH7xxx_PM, pm);
+
+#endif
   /* don't do much */
   return;
 }
@@ -138,6 +205,14 @@ static void ch7xxxPower(I2CDevPtr d, Boo
   CH7xxxPtr ch7xxx = CH7PTR(d);
   int ret;
   unsigned char ch;
+
+
+  ret = ch7xxxReadByte(ch7xxx, CH7xxx_PM, &ch);
+  if (ret == FALSE)
+    return;
+  
+  xf86DrvMsg(ch7xxx->d.pI2CBus->scrnIndex, X_ERROR, "ch7xxx pm is %02X\n", ch);
+  
 #if 0  
   ret = ch7xxxReadByte(ch7xxx, CH7xxx_REG8, &ch);
   if (ret)
@@ -156,31 +231,33 @@ static void ch7xxxPower(I2CDevPtr d, Boo
 static void ch7xxxPrintRegs(I2CDevPtr d)
 {
   CH7xxxPtr ch7xxx = CH7PTR(d);
+  int i;
+
+  ch7xxxSaveRegs(d);
+
+  for (i = 0; i < CH7xxx_NUM_REGS; i++) {
+    if (( i % 8 ) == 0 )
+      ErrorF("\n %02X: ", i);
+    ErrorF("%02X ", ch7xxx->ModeReg.regs[i]);
+
+  }
 }
 
-static void ch7xxxSaveRegs(I2CDevPtr d)
+static void ch7xxxSaveRegs(void *d)
 {
-  CH7xxxPtr ch7xxx = CH7PTR(d);
-  
-#if 0
-  if (!ch7xxxReadByte(ch7xxx, CH7xxx_FREQ_LO, &ch7xxx->SavedReg.freq_lo))
-      return;
+  CH7xxxPtr ch7xxx = CH7PTR(((I2CDevPtr)d));
+  int ret;
+  int i;
 
-  if (!ch7xxxReadByte(ch7xxx, CH7xxx_FREQ_HI, &ch7xxx->SavedReg.freq_hi))
-      return;
+  for (i = 0; i < CH7xxx_NUM_REGS; i++) {
+    ret = ch7xxxReadByte(ch7xxx, i, &ch7xxx->SavedReg.regs[i]);
+    if (ret == FALSE)
+      break;
+  }
 
-  if (!ch7xxxReadByte(ch7xxx, CH7xxx_REG8, &ch7xxx->SavedReg.reg8))
-    return;
-  
-  if (!ch7xxxReadByte(ch7xxx, CH7xxx_REG9, &ch7xxx->SavedReg.reg9))
-    return;
+  memcpy(ch7xxx->ModeReg.regs, ch7xxx->SavedReg.regs, CH7xxx_NUM_REGS);
 
-  if (!ch7xxxReadByte(ch7xxx, CH7xxx_REGC, &ch7xxx->SavedReg.regc))
-    return;
-  
-#endif
   return;
-
 }
 
 I830I2CVidOutputRec CH7xxxVidOutput = {
diff --git a/src/ch7xxx/ch7xxx_reg.h b/src/ch7xxx/ch7xxx_reg.h
index 4b17314..59de13b 100644
--- a/src/ch7xxx/ch7xxx_reg.h
+++ b/src/ch7xxx/ch7xxx_reg.h
@@ -29,15 +29,19 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define CH7xxx_REG_VID 0x4a
 #define CH7xxx_REG_DID 0x4b
 
+
+#define CH7011_VID 0x83
+#define CH7009A_VID 0x84
+#define CH7009B_VID 0x85
+#define CH7301_VID 0x95
+
 #define CH7xxx_VID 0x84
 #define CH7xxx_DID 0x17
 
+#define CH7xxx_NUM_REGS 0x4c
+
 typedef struct _CH7xxxSaveRec {
-  CARD8 freq_lo;
-  CARD8 freq_hi;
-  CARD8 reg8;
-  CARD8 reg9;
-  CARD8 regc;
+  CARD8 regs[CH7xxx_NUM_REGS];
 } CH7xxxSaveRec;
 
 typedef struct {
@@ -48,4 +52,40 @@ typedef struct {
 
 #define CH7PTR(d) ((CH7xxxPtr)(d->DriverPrivate.ptr))
 
+#define CH7xxx_CM 0x1C
+#define CH7xxx_CM_XCM (1<<0)
+#define CH7xxx_CM_MCP (1<<2)
+#define CH7xxx_INPUT_CLOCK 0x1D
+#define CH7xxx_GPIO 0x1E
+#define CH7xxx_IDF 0x1F
+
+#define CH7xxx_IDF_HSP (1<<3)
+#define CH7xxx_IDF_VSP (1<<4)
+
+#define CH7301_CONNECTION_DETECT 0x20
+#define CH7301_DAC_CNTL 0x21
+#define CH7301_HOTPLUG 0x23
+#define CH7xxx_TCTL 0x31
+#define CH7xxx_TPCP 0x33
+#define CH7xxx_TPD 0x34
+#define CH7xxx_TPVT 0x35
+#define CH7xxx_TPF 0x36
+#define CH7301_TCT 0x37
+#define CH7301_TEST_PATTERN 0x48
+#define CH7xxx_PM 0x49
+
+#define CH7xxx_PM_FPD (1<<0)
+#define CH7301_PM_DACPD0 (1<<1)
+#define CH7301_PM_DACPD1 (1<<2)
+#define CH7301_PM_DACPD2 (1<<3)
+#define CH7xxx_PM_DVIL (1<<6)
+#define CH7xxx_PM_DVIP (1<<7)
+
+#define CH7301_SYNC_POLARITY 0x56
+
+#define CH7301_SYNC_RGB_YUV (1<<0)
+#define CH7301_SYNC_POL_DVI (1<<5)
+
+
+
 #endif
diff-tree dd03e4852c0ff9d23ca7956e92e1bede5bec2365 (from 064d0612f91e3fe051484f41ebeec3d6d0fa2768)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:20:18 2006 +1000

    sil164: fix return value check
    
    this fixes a bad return value in sil164

diff --git a/src/sil164/sil164.c b/src/sil164/sil164.c
index 5c57082..5e35323 100644
--- a/src/sil164/sil164.c
+++ b/src/sil164/sil164.c
@@ -140,7 +140,7 @@ static void sil164Power(I2CDevPtr d, Boo
   unsigned char ch;
   
   ret = sil164ReadByte(sil, SIL164_REG8, &ch);
-  if (ret)
+  if (ret == FALSE)
     return;
 
   if (On)
diff-tree 064d0612f91e3fe051484f41ebeec3d6d0fa2768 (from bb5c35484154494439288f87ca3ed6fd7f1207c1)
Author: Dave Airlie <airlied at linux.ie>
Date:   Wed Jul 5 16:29:57 2006 +1000

    Revert "Dump out registers so we can diff against modesetting branch"
    
    This reverts bb5c35484154494439288f87ca3ed6fd7f1207c1 commit.
    
    Get of my branch :-), also missed some added files breaks my build

diff --git a/src/Makefile.am b/src/Makefile.am
index b4dc72b..6dc3d57 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -46,8 +46,6 @@ 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 18f67ff..316be13 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 a3cd95d..6b8299d 100644
--- a/src/i810_reg.h
+++ b/src/i810_reg.h
@@ -711,19 +711,6 @@ 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 3d518fd..75e5b65 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -184,7 +184,6 @@ 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"
@@ -4773,7 +4772,6 @@ 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 b866675..8323acd 100644
--- a/src/i830_modes.c
+++ b/src/i830_modes.c
@@ -895,10 +895,8 @@ DisplayModePtr I830xf86DDCModes(ScrnInfo
 	    count++;
 
 	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		       "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);
+		       "Valid Mode from Detailed timing table: %s\n",
+		       new->name);
 
 	    I830xf86SortModes(&new, &first, &last);
 	}
@@ -914,11 +912,8 @@ 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 (err < 0) err = -err;
-
-		if (err < 1.0) {
+		if (abs((float)ddc->timings2[j].refresh - refresh) < 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 201f734..bd88004 100644
--- a/src/i830_raw.c
+++ b/src/i830_raw.c
@@ -541,7 +541,8 @@ I830RawSetHw(ScrnInfoPtr pScrn, DisplayM
     return FALSE;
   
   *ht = (htotal << HTOTAL_SHIFT) | (hactive << HACTIVE_SHIFT);
-  *hb = (hblank_start << HBLANKSTART_SHIFT) | (hblank_end << HBLANKEND_SHIFT);
+  *hb = (hblank_start << HBLANKSTART_SHIFT) |
+    (hblank_end << HSYNCEND_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 2a31c5a..726f28f 100644
--- a/src/i830_sdvo.c
+++ b/src/i830_sdvo.c
@@ -857,54 +857,3 @@ 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