diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2011-05-02 16:58:28 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:41:52 -0800 |
commit | 4268cd392fdb3bf94a33fadaaf06e7bb19c5cb94 (patch) | |
tree | 1d0a3e3a94d6683f53444170fbf8a8899a12f04f /drivers/i2c | |
parent | a54ec417aeed9c68ab19183eabc850d7dd69d73a (diff) |
i2c: tegra: Add more debug message in failure case
Added some more debug message to print during i2c transfer
failure to get more information from log.
This help to understand/analyse the issue quickly.
Original-Change-Id: Ie957b9f2ad737da210722f2ea6f18da9a7b76813
Reviewed-on: http://git-master/r/30011
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: Rc40314cf7d257db51d98fba2dc94c8398fb2b8a9
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/i2c-tegra.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 12914ed10981..420397626155 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -17,6 +17,9 @@ * */ +/*#define DEBUG 1*/ +/*#define VERBOSE_DEBUG 1*/ + #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> @@ -157,6 +160,7 @@ struct tegra_i2c_dev { size_t msg_buf_remaining; int msg_read; struct i2c_msg *msgs; + int msg_add; int msgs_num; bool is_suspended; int bus_count; @@ -439,7 +443,8 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) status = i2c_readl(i2c_dev, I2C_INT_STATUS); if (status == 0) { - dev_warn(i2c_dev->dev, "unknown interrupt\n"); + dev_warn(i2c_dev->dev, "unknown interrupt Add 0x%02x\n", + i2c_dev->msg_add); i2c_dev->msg_err |= I2C_ERR_UNKNOWN_INTERRUPT; if (!i2c_dev->irq_disabled) { @@ -452,14 +457,21 @@ static irqreturn_t tegra_i2c_isr(int irq, void *dev_id) } if (unlikely(status & status_err)) { + dev_warn(i2c_dev->dev, "I2c error status 0x%08x\n", status); if (status & I2C_INT_NO_ACK) { i2c_dev->msg_err |= I2C_ERR_NO_ACK; - dev_warn(i2c_dev->dev, "no acknowledge\n"); + dev_warn(i2c_dev->dev, "no acknowledge from address" + " 0x%x\n", i2c_dev->msg_add); + dev_warn(i2c_dev->dev, "Packet status 0x%08x\n", + i2c_readl(i2c_dev, I2C_PACKET_TRANSFER_STATUS)); } if (status & I2C_INT_ARBITRATION_LOST) { i2c_dev->msg_err |= I2C_ERR_ARBITRATION_LOST; - dev_warn(i2c_dev->dev, "arbitration lost\n"); + dev_warn(i2c_dev->dev, "arbitration lost during " + " communicate to add 0x%x\n", i2c_dev->msg_add); + dev_warn(i2c_dev->dev, "Packet status 0x%08x\n", + i2c_readl(i2c_dev, I2C_PACKET_TRANSFER_STATUS)); } complete(&i2c_dev->msg_complete); @@ -560,6 +572,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus, i2c_dev->msg_err = I2C_ERR_NONE; i2c_dev->msg_read = (msg->flags & I2C_M_RD); INIT_COMPLETION(i2c_dev->msg_complete); + i2c_dev->msg_add = msg->addr; i2c_dev->packet_header = (0 << PACKET_HEADER0_HEADER_SIZE_SHIFT) | PACKET_HEADER0_PROTOCOL_I2C | |