summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorChaitanya Bandi <bandik@nvidia.com>2012-12-31 16:41:22 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 12:58:47 -0700
commit662c97036f0aeb7e36df92e8c84360950f05b095 (patch)
tree9a4d38428b1cd2c4362aebd92f0892b7e05500d3 /drivers/i2c
parente9d9a80460be927ca67652b7822d390a1d8b3f0d (diff)
i2c: tegra: Use IMMEDIATE option for I2C Bus Clear
Use Immediate option instead of Threshold in case of I2C bus clear logic. Bug 1210176 Change-Id: Idc1bd977cd0ac79092117ace5f3283d9219b1eb1 Signed-off-by: Chaitanya Bandi <bandik@nvidia.com> Reviewed-on: http://git-master/r/188220 (cherry picked from commit 3bf0ba5303b976bf94f147300b5a9132a8d8195b) Reviewed-on: http://git-master/r/194668 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index e6a2e27b9cac..bdb1399fd157 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -115,6 +115,9 @@
#define I2C_HEADER_SLAVE_ADDR_SHIFT 1
#define I2C_BUS_CLEAR_CNFG 0x084
+#define I2C_BC_SCLK_THRESHOLD (9<<16)
+#define I2C_BC_STOP_COND (1<<2)
+#define I2C_BC_TERMINATE (1<<1)
#define I2C_BC_ENABLE (1<<0)
#define I2C_BUS_CLEAR_STATUS 0x088
@@ -900,7 +903,11 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev,
if (i2c_dev->msg_err == I2C_ERR_ARBITRATION_LOST) {
if (i2c_dev->chipdata->has_hw_arb_support) {
INIT_COMPLETION(i2c_dev->msg_complete);
- i2c_writel(i2c_dev, I2C_BC_ENABLE, I2C_BUS_CLEAR_CNFG);
+ i2c_writel(i2c_dev, I2C_BC_ENABLE
+ | I2C_BC_SCLK_THRESHOLD
+ | I2C_BC_STOP_COND
+ | I2C_BC_TERMINATE
+ , I2C_BUS_CLEAR_CNFG);
tegra_i2c_unmask_irq(i2c_dev, I2C_INT_BUS_CLEAR_DONE);
wait_for_completion_timeout(&i2c_dev->msg_complete,