summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAlok Chauhan <alokc@nvidia.com>2011-08-11 15:12:11 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-08-16 17:38:20 -0700
commit2f91dfeeaba9d452497a6074f95af40877f8db44 (patch)
tree9658d98415ddc94469474293bb3ebfde965dace5 /drivers
parente0a6e3351dbb478ed12c0017f845ac292f1b24af (diff)
i2c: tegra: Updated Arbitration lost recovery
Updated arbitration lost recovery to accumulate i2c multiplexing. bug 854305 Change-Id: I3f669c507980df78fa443c84b304d337bbe6a6da Reviewed-on: http://git-master/r/46630 Reviewed-by: Alok Chauhan <alokc@nvidia.com> Reviewed-by: Bandi Krishna Chaitanya <bandik@nvidia.com> Tested-by: Bandi Krishna Chaitanya <bandik@nvidia.com> Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 6eac092deb4a..84bc678a583f 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -121,6 +121,8 @@ struct tegra_i2c_bus {
int mux_len;
unsigned long bus_clk_rate;
struct i2c_adapter adapter;
+ int scl_gpio;
+ int sda_gpio;
};
struct tegra_i2c_dev {
@@ -156,8 +158,6 @@ struct tegra_i2c_dev {
u16 slave_addr;
bool is_clkon_always;
struct tegra_i2c_bus busses[1];
- int scl_gpio;
- int sda_gpio;
int (*arb_recovery)(int scl_gpio, int sda_gpio);
};
@@ -637,7 +637,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus,
/* Arbitration Lost occurs, Start recovery */
if (i2c_dev->msg_err == I2C_ERR_ARBITRATION_LOST) {
if (i2c_dev->arb_recovery) {
- arb_stat = i2c_dev->arb_recovery(i2c_dev->scl_gpio, i2c_dev->sda_gpio);
+ arb_stat = i2c_dev->arb_recovery(i2c_bus->scl_gpio, i2c_bus->sda_gpio);
if (!arb_stat)
return -EAGAIN;
}
@@ -814,8 +814,6 @@ static int tegra_i2c_probe(struct platform_device *pdev)
i2c_dev->slave_addr = plat->slave_addr;
i2c_dev->is_dvc = plat->is_dvc;
- i2c_dev->scl_gpio = plat->scl_gpio;
- i2c_dev->sda_gpio = plat->sda_gpio;
i2c_dev->arb_recovery = plat->arb_recovery;
init_completion(&i2c_dev->msg_complete);
@@ -847,6 +845,9 @@ static int tegra_i2c_probe(struct platform_device *pdev)
i2c_bus->mux_len = plat->bus_mux_len[i];
i2c_bus->bus_clk_rate = plat->bus_clk_rate[i] ?: 100000;
+ i2c_bus->scl_gpio = plat->scl_gpio[i];
+ i2c_bus->sda_gpio = plat->sda_gpio[i];
+
i2c_bus->adapter.algo = &tegra_i2c_algo;
i2c_set_adapdata(&i2c_bus->adapter, i2c_bus);
i2c_bus->adapter.owner = THIS_MODULE;