summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2011-05-02 16:58:28 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:41:52 -0800
commit4268cd392fdb3bf94a33fadaaf06e7bb19c5cb94 (patch)
tree1d0a3e3a94d6683f53444170fbf8a8899a12f04f /drivers/i2c
parenta54ec417aeed9c68ab19183eabc850d7dd69d73a (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.c19
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 |