On Thu, 19 Dec 2002, Joe Drew wrote: > On Thu, 2002-12-19 at 15:05, Joe Drew wrote: > > >From a module compiled with debug information: > > > > i2c-piix4.o: Transaction (pre): CNT=00, CMD=19, ADD=78, DAT0=25, DAT1=00 > > i2c-piix4.o: SMBus busy (01). Resetting... > > i2c-piix4.o: Failed! (01) > > > > It seems like the i2c bus is stuck, or the piix4 is in a pooched state. > > Why would this be, and what can I do about it? > > I should have said, rather, "Why did this happen, and what can I do to > prevent it in the future?" We've the knowledge to hack the drivers here, > but we just don't know enough about SMBus to know what the problem > probably is. Had a quick look at PIIX4 specs and source. IMO reset sequence is incorrect. The host busy flag is not write-resettable, one should use KILL flag in control register. As the busy status appears in the beginning of transaction, this could be ACPI system accessing monitor data. In this case we should not touch any status flags and maybe retry after 10ms. I think "Bus collision" equals loosing in SDA arbitration cycle, so another master completes the transmission. I do not agree the note about clock stopping and slave stuck in mid-transmission. No PIIX here for testing.. -- Ky?sti M?lkki kmalkki at cc.hut.fi