Hi Mark, list.

I am a bit confused with the code for the I2C bus(ses), especially
in a multiple heads environment.

The current code use the extended registers 0x3e, 0x3f in order
to implement the I2C's functions I2CPutBits and I2CGetBits, but
I think that the second head should use actually the registers
0x36 and 0x37.

Am I correct?  If yes, following patch should fix that.

Cheers,

-- 
Ducrot Bruno
http://www.poupinou.org        Page profaissionelle
http://toto.tu-me-saoules.com  Haume page
diff -Naur xc/programs/Xserver/hw/xfree86/drivers/nv.old/nv_dac.c 
xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c
--- xc/programs/Xserver/hw/xfree86/drivers/nv.old/nv_dac.c      Mon Oct 14 20:22:45 
2002
+++ xc/programs/Xserver/hw/xfree86/drivers/nv/nv_dac.c  Mon Nov 25 15:36:42 2002
@@ -320,13 +320,16 @@
 {
     NVPtr pNv = NVPTR(pScrn);
     unsigned char val;
+    unsigned char cr;
+
+    cr = pNv->SecondCRTC ? 0x36 : 0x3e;
 
     /* wait for Vsync */
     while(VGA_RD08(pNv->riva.PCIO, 0x3da) & 0x08);
     while(!(VGA_RD08(pNv->riva.PCIO, 0x3da) & 0x08));
 
     /* Get the result */
-    VGA_WR08(pNv->riva.PCIO, 0x3d4, 0x3e);
+    VGA_WR08(pNv->riva.PCIO, 0x3d4, cr);
     val = VGA_RD08(pNv->riva.PCIO, 0x3d5);
     DEBUG(ErrorF("NV_ddc1Read(%p,...) returns %d\n",
                  pScrn, val));
@@ -338,9 +341,12 @@
 {
     NVPtr pNv = NVPTR(xf86Screens[b->scrnIndex]);
     unsigned char val;
+    unsigned char cr;
+
+    cr = pNv->SecondCRTC ? 0x36 : 0x3e;
 
     /* Get the result. */
-    VGA_WR08(pNv->riva.PCIO, 0x3d4, 0x3e);
+    VGA_WR08(pNv->riva.PCIO, 0x3d4, cr);
     val = VGA_RD08(pNv->riva.PCIO, 0x3d5);
 
     *clock = (val & DDC_SCL_READ_MASK) != 0;
@@ -354,8 +360,11 @@
 {
     NVPtr pNv = NVPTR(xf86Screens[b->scrnIndex]);
     unsigned char val;
+    unsigned char cr;
+
+    cr = pNv->SecondCRTC ? 0x37 : 0x3f;
 
-    VGA_WR08(pNv->riva.PCIO, 0x3d4, 0x3f);
+    VGA_WR08(pNv->riva.PCIO, 0x3d4, cr);
     val = VGA_RD08(pNv->riva.PCIO, 0x3d5) & 0xf0;
     if (clock)
         val |= DDC_SCL_WRITE_MASK;
@@ -367,7 +376,7 @@
     else
         val &= ~DDC_SDA_WRITE_MASK;
 
-    VGA_WR08(pNv->riva.PCIO, 0x3d4, 0x3f);
+    VGA_WR08(pNv->riva.PCIO, 0x3d4, cr);
     VGA_WR08(pNv->riva.PCIO, 0x3d5, val | 0x1);
     
     DEBUG(ErrorF("NV_I2CPutBits(%p, %d, %d) val=0x%x\n", b, clock, data, val));

Reply via email to