diff options
author | Laxman Dewangan <ldewangan@nvidia.com> | 2011-05-02 16:58:28 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-05-05 00:21:05 -0700 |
commit | 46bd012366618dedcc17d3bde488bbd54f7aac52 (patch) | |
tree | a319f49c7df15acf408feb15d794ed275a008e27 /drivers/i2c/busses | |
parent | c7363c3953bb8f49ed5d44e8726cf58208f09bcc (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.
Change-Id: Ie957b9f2ad737da210722f2ea6f18da9a7b76813
Reviewed-on: http://git-master/r/30011
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Diffstat (limited to 'drivers/i2c/busses')
-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 0ef60184d4fc..08d0a7f0a8b9 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> @@ -138,6 +141,7 @@ struct tegra_i2c_dev { int msg_read; int msg_transfer_complete; struct i2c_msg *msgs; + int msg_add; int msgs_num; bool is_suspended; int bus_count; @@ -381,7 +385,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) { @@ -394,14 +399,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); @@ -504,6 +516,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus, i2c_dev->msg_transfer_complete = 0; 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 | |