mpc5200: reduce delays in i2c
authorJon Smirl <jonsmirl@gmail.com>
Sat, 4 Apr 2009 21:44:51 +0000 (17:44 -0400)
committerWolfgang Denk <wd@denx.de>
Sat, 4 Apr 2009 23:34:08 +0000 (01:34 +0200)
The previous code waited 1000us before checking i2c
status. Measurement shows i2c is usually ready in
under 50us. Change the polling interval to 15us,
loop 6,667 times to keep the polling timeout constant
at 100ms.

cpu/mpc5xxx/i2c.c

index e2506d82f2876af48aa5bec54d89ebaf1a09c4df..23419324ba592b6091fef2081d9ec9aec09605b6 100644 (file)
@@ -38,7 +38,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #error CONFIG_SYS_I2C_MODULE is not properly configured
 #endif
 
-#define I2C_TIMEOUT    100
+#define I2C_TIMEOUT    6667
 #define I2C_RETRIES    3
 
 struct mpc5xxx_i2c_tap {
@@ -94,7 +94,7 @@ static int wait_for_bb(void)
                mpc_reg_out(&regs->mcr, 0, 0);
                mpc_reg_out(&regs->mcr, I2C_EN, 0);
 #endif
-               udelay(1000);
+               udelay(15);
                status = mpc_reg_in(&regs->msr);
        }
 
@@ -109,7 +109,7 @@ static int wait_for_pin(int *status)
        *status = mpc_reg_in(&regs->msr);
 
        while (timeout-- && !(*status & I2C_IF)) {
-               udelay(1000);
+               udelay(15);
                *status = mpc_reg_in(&regs->msr);
        }