summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2012-03-27 17:49:06 +0530
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-03-30 09:31:37 -0700
commitc94ba0129fbf708c12bd5def0ee02be994e814c7 (patch)
treed004f7b17940dab89e3ed5c46400226efd4b11c1 /drivers/i2c
parenta6ecc18e925afa23b5597a27ef66b01fad112970 (diff)
i2c: tegra: Correct 10bit address configuration
The slave address of device to be configured in packet header as follows: 7 bit address: PacketHeader3[7:1] 10 bit address: PacketHeader3[9:0] Fixing the code to make packet header3 properly. Change-Id: I1797066d23ada5d4d7b14710201a1fb17566b78b Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/92556 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Andy Carman <acarman@nvidia.com> Reviewed-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-tegra.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c
index 8468804551cf..f04b5e4d1813 100644
--- a/drivers/i2c/busses/i2c-tegra.c
+++ b/drivers/i2c/busses/i2c-tegra.c
@@ -626,12 +626,15 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_bus *i2c_bus,
i2c_dev->payload_size = msg->len - 1;
i2c_writel(i2c_dev, i2c_dev->payload_size, I2C_TX_FIFO);
- i2c_dev->io_header = msg->addr << I2C_HEADER_SLAVE_ADDR_SHIFT;
- i2c_dev->io_header |= I2C_HEADER_IE_ENABLE;
+ i2c_dev->io_header = I2C_HEADER_IE_ENABLE;
if (!stop)
i2c_dev->io_header |= I2C_HEADER_REPEAT_START;
- if (msg->flags & I2C_M_TEN)
+ if (msg->flags & I2C_M_TEN) {
+ i2c_dev->io_header |= msg->addr;
i2c_dev->io_header |= I2C_HEADER_10BIT_ADDR;
+ } else {
+ i2c_dev->io_header |= (msg->addr << I2C_HEADER_SLAVE_ADDR_SHIFT);
+ }
if (msg->flags & I2C_M_IGNORE_NAK)
i2c_dev->io_header |= I2C_HEADER_CONT_ON_NAK;
if (msg->flags & I2C_M_RD)
@@ -751,7 +754,7 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
static u32 tegra_i2c_func(struct i2c_adapter *adap)
{
- return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR;
}
static const struct i2c_algorithm tegra_i2c_algo = {