]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
i2c: octeon: Add flush writeq helper function
authorPeter Swain <pswain@cavium.com>
Mon, 25 Apr 2016 14:33:33 +0000 (16:33 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Mon, 25 Apr 2016 21:33:16 +0000 (23:33 +0200)
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 <pswain@cavium.com>
Signed-off-by: Jan Glauber <jglauber@cavium.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-octeon.c

index f83f6b8892b5a6505fdaabe30dae48a43ed6dce7..08ca66505ce26a13464c90d963a0c1ad2a358228 100644 (file)
@@ -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);
 }
 
 /**