| From e435149c5294eb56b2a527473e1e071627b166eb Mon Sep 17 00:00:00 2001 |
| From: "Jeffrey (Sheng-Hui) Chu" <jeffchu@broadcom.com> |
| Date: Wed, 23 Nov 2011 11:33:07 +0100 |
| Subject: [PATCH 01/24] i2c-algo-bit: Generate correct i2c address sequence |
| for 10-bit target |
| |
| commit cc6bcf7d2ec2234e7b41770185e4dc826390185e upstream. |
| |
| The wrong bits were put on the wire, fix that. |
| |
| This fixes kernel bug #42562. |
| |
| Signed-off-by: Sheng-Hui J. Chu <jeffchu@broadcom.com> |
| Signed-off-by: Jean Delvare <khali@linux-fr.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| drivers/i2c/algos/i2c-algo-bit.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c |
| index a39e6cf..4e1a332 100644 |
| --- a/drivers/i2c/algos/i2c-algo-bit.c |
| +++ b/drivers/i2c/algos/i2c-algo-bit.c |
| @@ -470,7 +470,7 @@ static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) |
| |
| if (flags & I2C_M_TEN) { |
| /* a ten bit address */ |
| - addr = 0xf0 | ((msg->addr >> 7) & 0x03); |
| + addr = 0xf0 | ((msg->addr >> 7) & 0x06); |
| bit_dbg(2, &i2c_adap->dev, "addr0: %d\n", addr); |
| /* try extended address code...*/ |
| ret = try_address(i2c_adap, addr, retries); |
| @@ -480,7 +480,7 @@ static int bit_doAddress(struct i2c_adapter *i2c_adap, struct i2c_msg *msg) |
| return -EREMOTEIO; |
| } |
| /* the remaining 8 bit address */ |
| - ret = i2c_outb(i2c_adap, msg->addr & 0x7f); |
| + ret = i2c_outb(i2c_adap, msg->addr & 0xff); |
| if ((ret != 1) && !nak_ok) { |
| /* the chip did not ack / xmission error occurred */ |
| dev_err(&i2c_adap->dev, "died at 2nd address code\n"); |
| -- |
| 1.7.12.1 |
| |