diff options
-rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index 0b0254312d21..3525c9e62cb0 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
@@ -524,6 +524,9 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap, | |||
524 | dev->buf = msg->buf; | 524 | dev->buf = msg->buf; |
525 | dev->buf_len = msg->len; | 525 | dev->buf_len = msg->len; |
526 | 526 | ||
527 | /* make sure writes to dev->buf_len are ordered */ | ||
528 | barrier(); | ||
529 | |||
527 | omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len); | 530 | omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len); |
528 | 531 | ||
529 | /* Clear the FIFO Buffers */ | 532 | /* Clear the FIFO Buffers */ |
@@ -581,7 +584,6 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adap, | |||
581 | */ | 584 | */ |
582 | timeout = wait_for_completion_timeout(&dev->cmd_complete, | 585 | timeout = wait_for_completion_timeout(&dev->cmd_complete, |
583 | OMAP_I2C_TIMEOUT); | 586 | OMAP_I2C_TIMEOUT); |
584 | dev->buf_len = 0; | ||
585 | if (timeout == 0) { | 587 | if (timeout == 0) { |
586 | dev_err(dev->dev, "controller timed out\n"); | 588 | dev_err(dev->dev, "controller timed out\n"); |
587 | omap_i2c_init(dev); | 589 | omap_i2c_init(dev); |