aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Brownell <david-b@pacbell.net>2008-01-27 12:14:46 -0500
committerJean Delvare <khali@hyperion.delvare>2008-01-27 12:14:46 -0500
commitbf3e2d1d9b860591f3f204aa66d6a3c30058818d (patch)
treeaf5683e3ff7ba26913e2f77bc8cf227702049590
parentcf978ab2846d86709802f38c80d1d53da364bf51 (diff)
i2c-algo-bit: Fix NAK/ARB comments
Update comments and logging on return path for byte writes. NAK is an error, to be reported or optionally ignored. Timeouts are always errors. Lost arbitration is not currently handled, so don't even list it as an option in the error message. Don't return bogus EFAULT code for inappropriate NAK; EIO is better, there is no bad userspace address in question. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Jean Delvare <khali@linux-fr.org>
-rw-r--r--drivers/i2c/algos/i2c-algo-bit.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
index 260c5d70b0b..35812823787 100644
--- a/drivers/i2c/algos/i2c-algo-bit.c
+++ b/drivers/i2c/algos/i2c-algo-bit.c
@@ -357,10 +357,26 @@ static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg)
357 count--; 357 count--;
358 temp++; 358 temp++;
359 wrcount++; 359 wrcount++;
360 } else { /* arbitration or no acknowledge */ 360
361 dev_err(&i2c_adap->dev, "sendbytes: error - bailout.\n"); 361 /* A slave NAKing the master means the slave didn't like
362 return (retval<0)? retval : -EFAULT; 362 * something about the data it saw. For example, maybe
363 /* got a better one ?? */ 363 * the SMBus PEC was wrong.
364 */
365 } else if (retval == 0) {
366 dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n");
367 return -EIO;
368
369 /* Timeout; or (someday) lost arbitration
370 *
371 * FIXME Lost ARB implies retrying the transaction from
372 * the first message, after the "winning" master issues
373 * its STOP. As a rule, upper layer code has no reason
374 * to know or care about this ... it is *NOT* an error.
375 */
376 } else {
377 dev_err(&i2c_adap->dev, "sendbytes: error %d\n",
378 retval);
379 return retval;
364 } 380 }
365 } 381 }
366 return wrcount; 382 return wrcount;