[i2c] [PATCH] s3c24xx: fix writes to certain devices
Ben Dooks
ben-i2c at fluff.org
Tue Sep 12 23:52:44 CEST 2006
[ Patch is Repost to correct list ]
Fix the write to certain types of device connected
to the S3C2410 or compatible i2c controller by
adding a small delay (by accessing i2c registers)
to the write path.
Signed-off-by: Ben Dooks <ben-linux at fluff.org>
-------------- next part --------------
diff -urpN -X ../dontdiff linux-2.6.17-git9-bjd1/drivers/i2c/busses/i2c-s3c2410.c linux-2.6.17-git9/drivers/i2c/busses/i2c-s3c2410.c
--- linux-2.6.17-git9-bjd1/drivers/i2c/busses/i2c-s3c2410.c 2006-06-18 02:49:35.000000000 +0100
+++ linux-2.6.17-git9/drivers/i2c/busses/i2c-s3c2410.c 2006-06-26 23:05:56.000000000 +0100
@@ -269,6 +269,7 @@ static int i2s_s3c_irq_nextbyte(struct s
unsigned long tmp;
unsigned char byte;
int ret = 0;
+ int i;
switch (i2c->state) {
@@ -325,6 +326,14 @@ static int i2s_s3c_irq_nextbyte(struct s
byte = i2c->msg->buf[i2c->msg_ptr++];
writeb(byte, i2c->regs + S3C2410_IICDS);
+ /* sometimes write operations fail if the write is
+ * let go too quickly, slow down the proceedings
+ * slightly.
+ */
+
+ for (i = 0; i < 6; i++)
+ tmp += readl(i2c->regs + S3C2410_IICSTAT);
+
} else if (!is_lastmsg(i2c)) {
/* we need to go to the next i2c message */
More information about the i2c
mailing list