i2c-pxa2xx: check timeout correctly
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 23 Feb 2011 11:38:19 +0000 (12:38 +0100)
committerBen Dooks <ben-linux@fluff.org>
Mon, 21 Mar 2011 09:23:55 +0000 (09:23 +0000)
timeout here maybe 0 if the event occured and a task with a higher
priority stole the cpu and we were sleeping longer than the timeout
value we specified.
In case of a real timeout I changed the error code to I2C_RETRY so we
retry the transfer.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
drivers/i2c/busses/i2c-pxa.c

index fa8dd2c634d9ea33145de0ab6a753037719298d1..86128363a57fce0bac4308d6ed60aade825f5eeb 100644 (file)
@@ -770,8 +770,10 @@ static int i2c_pxa_do_xfer(struct pxa_i2c *i2c, struct i2c_msg *msg, int num)
         */
        ret = i2c->msg_idx;
 
-       if (timeout == 0)
+       if (!timeout && i2c->msg_num) {
                i2c_pxa_scream_blue_murder(i2c, "timeout");
+               ret = I2C_RETRY;
+       }
 
  out:
        return ret;