[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1333345982-16595-1-git-send-email-alokc@nvidia.com>
Date: Mon, 2 Apr 2012 11:23:02 +0530
From: Alok Chauhan <alokc@...dia.com>
To: <swarren@...dotorg.org>, <khali@...ux-fr.org>,
<ben-linux@...ff.org>, <w.sang@...gutronix.de>,
<swarren@...dia.com>, <olof@...om.net>, <bones@...retlab.ca>,
<omaplinuxkernel@...il.com>, <ccross@...roid.com>,
<ldewangan@...dia.com>, <linux-tegra@...r.kernel.org>,
<linux-i2c@...r.kernel.org>, <dgreid@...omium.org>
CC: <alokc@...dia.com>, <linux-kernel@...r.kernel.org>
Subject: [PATCH v2] i2c: tegra: Add delay before reset the controller
NACK interrupt generated before I2C controller generates
the STOP condition on bus. In Software, because of this
reset of controller is happening before I2C controller could
complete STOP condition. So wait for some time before resetting
the controller so that STOP condition has delivered properly on bus.
Added delay of 2 clock period before reset the
controller in case of NACK error.
Signed-off-by: Alok Chauhan <alokc@...dia.com>
---
Added the more descriptive commit message about issue in case
of NACK error condition. Changed the comment in code also
drivers/i2c/busses/i2c-tegra.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index e978635..dfb850a8 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -516,6 +516,14 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
if (likely(i2c_dev->msg_err == I2C_ERR_NONE))
return 0;
+ /*
+ * NACK interrupt generated before I2C controller generates the STOP
+ * condition on bus. So wait for some time before reset the controller
+ * so that STOP condition has delivered properly on bus.
+ */
+ if (i2c_dev->msg_err == I2C_ERR_NO_ACK)
+ udelay(DIV_ROUND_UP(2 * 1000000, i2c_dev->bus_clk_rate));
+
tegra_i2c_init(i2c_dev);
if (i2c_dev->msg_err == I2C_ERR_NO_ACK) {
if (msg->flags & I2C_M_IGNORE_NAK)
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists