From: Peter Swain Date: Mon, 25 Apr 2016 14:33:33 +0000 (+0200) Subject: i2c: octeon: Add flush writeq helper function X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=30c24b25142a9171d38e8074758b3a370906fc7d;p=linux-beck.git i2c: octeon: Add flush writeq helper function Add helper function that reads back a value after writing to make sure the write is finished and use it in octeon_i2c_write_int(). Signed-off-by: Peter Swain Signed-off-by: Jan Glauber Signed-off-by: Wolfram Sang --- diff --git a/drivers/i2c/busses/i2c-octeon.c b/drivers/i2c/busses/i2c-octeon.c index f83f6b8892b5..08ca66505ce2 100644 --- a/drivers/i2c/busses/i2c-octeon.c +++ b/drivers/i2c/busses/i2c-octeon.c @@ -103,6 +103,12 @@ struct octeon_i2c { struct device *dev; }; +static void octeon_i2c_writeq_flush(u64 val, void __iomem *addr) +{ + __raw_writeq(val, addr); + __raw_readq(addr); /* wait for write to land */ +} + /** * octeon_i2c_reg_write - write an I2C core register * @i2c: The struct octeon_i2c @@ -172,8 +178,7 @@ static u64 octeon_i2c_read_int(struct octeon_i2c *i2c) */ static void octeon_i2c_write_int(struct octeon_i2c *i2c, u64 data) { - __raw_writeq(data, i2c->twsi_base + TWSI_INT); - __raw_readq(i2c->twsi_base + TWSI_INT); + octeon_i2c_writeq_flush(data, i2c->twsi_base + TWSI_INT); } /**