[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