diff options
Diffstat (limited to 'drivers/i2c/algos/i2c-algo-bit.c')
| -rw-r--r-- | drivers/i2c/algos/i2c-algo-bit.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c index a8e89df665b9..1147bddb8b2c 100644 --- a/drivers/i2c/algos/i2c-algo-bit.c +++ b/drivers/i2c/algos/i2c-algo-bit.c @@ -553,9 +553,16 @@ static int bit_xfer(struct i2c_adapter *i2c_adap,  		nak_ok = pmsg->flags & I2C_M_IGNORE_NAK;  		if (!(pmsg->flags & I2C_M_NOSTART)) {  			if (i) { -				bit_dbg(3, &i2c_adap->dev, "emitting " -					"repeated start condition\n"); -				i2c_repstart(adap); +				if (msgs[i - 1].flags & I2C_M_STOP) { +					bit_dbg(3, &i2c_adap->dev, +						"emitting enforced stop/start condition\n"); +					i2c_stop(adap); +					i2c_start(adap); +				} else { +					bit_dbg(3, &i2c_adap->dev, +						"emitting repeated start condition\n"); +					i2c_repstart(adap); +				}  			}  			ret = bit_doAddress(i2c_adap, pmsg);  			if ((ret != 0) && !nak_ok) {  | 
