diff --git a/src/i830_i2c.c b/src/i830_i2c.c index d80229d..361bdf5 100644 --- a/src/i830_i2c.c +++ b/src/i830_i2c.c @@ -274,6 +274,8 @@ i830I2CGetBits(I2CBusPtr b, int *clock, int *data) I830Ptr pI830 = I830PTR(pScrn); CARD32 val; + /* invoke write cycle to strobe new datum */ + OUTREG(b->DriverPrivate.uval, 0); val = INREG(b->DriverPrivate.uval); /* @@ -337,6 +339,13 @@ i830I2CPutBits(I2CBusPtr b, int clock, int data) OUTREG(b->DriverPrivate.uval, reserved | data_bits | clock_bits); POSTING_READ(b->DriverPrivate.uval); + + /* lock DFlipFlop ? copied from vbios code */ + data_bits &= ~GPIO_DATA_DIR_MASK; + clock_bits &= ~GPIO_CLOCK_DIR_MASK; + OUTREG(b->DriverPrivate.uval, reserved | data_bits | clock_bits); + + POSTING_READ(b->DriverPrivate.uval); } #endif