summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorAlok Chauhan <alokc@nvidia.com>2011-08-11 15:12:11 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:48:18 -0800
commit12a1db271f54b696fcb0d4509aae056686d80c55 (patch)
tree52a08e0731ef6c17182bb148948210518a4022cb /drivers/i2c
parent047ec0b5a77b3b74573dd9b43f4175b857b25b74 (diff)
i2c: tegra: Updated Arbitration lost recovery
Updated arbitration lost recovery to accumulate i2c multiplexing. bug 854305 Original-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> Rebase-Id: R987d84dcf51a3d8e366f2e4b2d0d278304e2db76
Diffstat (limited to 'drivers/i2c')
-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 7997f7556af5..15ad0be8df06 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -122,6 +122,8 @@ struct tegra_i2c_bus {
int mux_len;
unsigned long bus_clk_rate;
struct i2c_adapter adapter;
+ int scl_gpio;
+ int sda_gpio;
};
/**
@@ -175,8 +177,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);
};
@@ -661,7 +661,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;
}
@@ -848,8 +848,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);
@@ -882,6 +880,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.dev.of_node = pdev->dev.of_node;
i2c_bus->adapter.algo = &tegra_i2c_algo;
i2c_set_adapdata(&i2c_bus->adapter, i2c_bus);