Per the PIIX4 errata, there maybe a delay between setting the
start bit in the Smbus Host Controller Register and the transaction
actually starting. If the driver doesn't delay long enough, it
may appear that the transaction is complete when actually it
hasn't started, this may lead to bus collisions.

Signed-off-by: David Milburn <[EMAIL PROTECTED]>
---
 drivers/ata/libata-core.c      |    0 
 drivers/i2c/busses/i2c-piix4.c |    2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
index 9bbe96c..84a70ac 100644
--- a/drivers/i2c/busses/i2c-piix4.c
+++ b/drivers/i2c/busses/i2c-piix4.c
@@ -232,7 +232,7 @@ static int piix4_transaction(void)
 
        /* We will always wait for a fraction of a second! (See PIIX4 docs 
errata) */
        do {
-               msleep(1);
+               msleep(2);
                temp = inb_p(SMBHSTSTS);
        } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT));
 

_______________________________________________
i2c mailing list
[email protected]
http://lists.lm-sensors.org/mailman/listinfo/i2c

Reply via email to