diff options
author | Alok Chauhan <alokc@nvidia.com> | 2011-08-11 15:12:11 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-08-16 17:38:20 -0700 |
commit | 2f91dfeeaba9d452497a6074f95af40877f8db44 (patch) | |
tree | 9658d98415ddc94469474293bb3ebfde965dace5 /drivers | |
parent | e0a6e3351dbb478ed12c0017f845ac292f1b24af (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.c | 11 |
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; |