summaryrefslogtreecommitdiff
path: root/drivers/i2c/busses
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2011-05-02 16:58:28 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-05-05 00:21:05 -0700
commit46bd012366618dedcc17d3bde488bbd54f7aac52 (patch)
treea319f49c7df15acf408feb15d794ed275a008e27 /drivers/i2c/busses
parentc7363c3953bb8f49ed5d44e8726cf58208f09bcc (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.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 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 |