]> git.sur5r.net Git - u-boot/blobdiff - drivers/i2c/mxs_i2c.c
Merge branch 'u-boot-ti/master' into 'u-boot-arm/master'
[u-boot] / drivers / i2c / mxs_i2c.c
index 46106b7712e6216c17822faa4cd8f5caa4dc8a52..a298c95e144ae3e35de1b0e2136929b793a282ad 100644 (file)
@@ -150,6 +150,7 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
 {
        struct mxs_i2c_regs *i2c_regs = (struct mxs_i2c_regs *)MXS_I2C0_BASE;
        uint32_t tmp = 0;
+       int timeout = MXS_I2C_MAX_TIMEOUT;
        int ret;
        int i;
 
@@ -169,9 +170,17 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
 
        for (i = 0; i < len; i++) {
                if (!(i & 3)) {
-                       while (readl(&i2c_regs->hw_i2c_queuestat) &
-                               I2C_QUEUESTAT_RD_QUEUE_EMPTY)
-                               ;
+                       while (--timeout) {
+                               tmp = readl(&i2c_regs->hw_i2c_queuestat);
+                               if (!(tmp & I2C_QUEUESTAT_RD_QUEUE_EMPTY))
+                                       break;
+                       }
+
+                       if (!timeout) {
+                               debug("MXS I2C: Failed receiving data!\n");
+                               return -ETIMEDOUT;
+                       }
+
                        tmp = readl(&i2c_regs->hw_i2c_queuedata);
                }
                buffer[i] = tmp & 0xff;