diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2014-06-12 18:57:13 +0530 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-06-13 17:59:49 -0700 |
commit | 0f8dd05a0b401a2d47c5bd2aab022b862cd97103 (patch) | |
tree | 448ed06d7e4ea5a2df7469b85f6aa4044cd92e6b /drivers/i2c | |
parent | 6a6688e23b6f01e5d6df38f5db971da562b0d76c (diff) |
i2c: algo: add more error/info prints
Enable more error/info prints to know the status of the
transfer if it fails.
Also when sending bytes, ignore the last byte ACK from the slave.
Change-Id: I2b655da28545362d6e7855baceedbfd8588b3e43
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-on: http://git-master/r/423070
GVS: Gerrit_Virtual_Submit
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/algos/i2c-algo-bit.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index 18768c80d87c..17a01e534425 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c @@ -34,6 +34,16 @@ /* ----- global defines ----------------------------------------------- */ +#define bit_info(dev, format, args...) \ + do { \ + dev_info(dev, format, ##args); \ + } while (0) + +#define bit_err(dev, format, args...) \ + do { \ + dev_err(dev, format, ##args); \ + } while (0) + #ifdef DEBUG #define bit_dbg(level, dev, format, args...) \ do { \ @@ -177,7 +187,7 @@ static int i2c_outb(struct i2c_adapter *i2c_adap, unsigned char c) setsda(adap, sb); udelay((adap->udelay + 1) / 2); if (sclhi(adap) < 0) { /* timed out */ - bit_dbg(1, &i2c_adap->dev, "i2c_outb: 0x%02x, " + bit_err(&i2c_adap->dev, "i2c_outb: 0x%02x, " "timeout at bit #%d\n", (int)c, i); return -ETIMEDOUT; } @@ -191,7 +201,7 @@ static int i2c_outb(struct i2c_adapter *i2c_adap, unsigned char c) } sdahi(adap); if (sclhi(adap) < 0) { /* timeout */ - bit_dbg(1, &i2c_adap->dev, "i2c_outb: 0x%02x, " + bit_err(&i2c_adap->dev, "i2c_outb: 0x%02x, " "timeout at ack\n", (int)c); return -ETIMEDOUT; } @@ -221,7 +231,7 @@ static int i2c_inb(struct i2c_adapter *i2c_adap) sdahi(adap); for (i = 0; i < 8; i++) { if (sclhi(adap) < 0) { /* timeout */ - bit_dbg(1, &i2c_adap->dev, "i2c_inb: timeout at bit " + bit_err(&i2c_adap->dev, "i2c_inb: timeout at bit " "#%d\n", 7 - i); return -ETIMEDOUT; } @@ -378,7 +388,7 @@ static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) retval = i2c_outb(i2c_adap, *temp); /* OK/ACK; or ignored NAK */ - if ((retval > 0) || (nak_ok && (retval == 0))) { + if ((retval > 0) || (nak_ok && (retval == 0)) || (count == 1)) { count--; temp++; wrcount++; @@ -388,7 +398,8 @@ static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) * the SMBus PEC was wrong. */ } else if (retval == 0) { - dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n"); + dev_err(&i2c_adap->dev, + "sendbytes: NAK bailout on byte %d\n", count); return -EIO; /* Timeout; or (someday) lost arbitration @@ -399,8 +410,9 @@ static int sendbytes(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) * to know or care about this ... it is *NOT* an error. */ } else { - dev_err(&i2c_adap->dev, "sendbytes: error %d\n", - retval); + dev_err(&i2c_adap->dev, + "sendbytes: error %d on byte %d\n", + retval, count); return retval; } } @@ -532,8 +544,10 @@ static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) if (flags & I2C_M_REV_DIR_ADDR) addr ^= 1; ret = try_address(i2c_adap, addr, retries); - if ((ret != 1) && !nak_ok) + if ((ret != 1) && !nak_ok) { + dev_err(&i2c_adap->dev, "Error on address cycle\n"); return -ENXIO; + } } return 0; |