mirror of
https://github.com/torvalds/linux
synced 2024-09-30 16:29:47 +00:00
i2c: img-scb: do dummy writes before fifo access
Move scb_wr_rd_fence to before reading from fifo and writing to
fifo to make sure the the first read/write is done after the required
number of cycles.
Fixes: commit 27bce457d5
("i2c: img-scb: Add Imagination Technologies I2C SCB driver")
Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com>
Acked-by: James Hogan <james.hogan@imgtec.com>
Reviewed-by: James Hartley <james.hartley@imgtec.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
0e59378bc0
commit
2aefb1bd41
|
@ -534,6 +534,7 @@ static void img_i2c_read_fifo(struct img_i2c *i2c)
|
||||||
u32 fifo_status;
|
u32 fifo_status;
|
||||||
u8 data;
|
u8 data;
|
||||||
|
|
||||||
|
img_i2c_wr_rd_fence(i2c);
|
||||||
fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG);
|
fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG);
|
||||||
if (fifo_status & FIFO_READ_EMPTY)
|
if (fifo_status & FIFO_READ_EMPTY)
|
||||||
break;
|
break;
|
||||||
|
@ -542,7 +543,6 @@ static void img_i2c_read_fifo(struct img_i2c *i2c)
|
||||||
*i2c->msg.buf = data;
|
*i2c->msg.buf = data;
|
||||||
|
|
||||||
img_i2c_writel(i2c, SCB_READ_FIFO_REG, 0xff);
|
img_i2c_writel(i2c, SCB_READ_FIFO_REG, 0xff);
|
||||||
img_i2c_wr_rd_fence(i2c);
|
|
||||||
i2c->msg.len--;
|
i2c->msg.len--;
|
||||||
i2c->msg.buf++;
|
i2c->msg.buf++;
|
||||||
}
|
}
|
||||||
|
@ -554,12 +554,12 @@ static void img_i2c_write_fifo(struct img_i2c *i2c)
|
||||||
while (i2c->msg.len) {
|
while (i2c->msg.len) {
|
||||||
u32 fifo_status;
|
u32 fifo_status;
|
||||||
|
|
||||||
|
img_i2c_wr_rd_fence(i2c);
|
||||||
fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG);
|
fifo_status = img_i2c_readl(i2c, SCB_FIFO_STATUS_REG);
|
||||||
if (fifo_status & FIFO_WRITE_FULL)
|
if (fifo_status & FIFO_WRITE_FULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
img_i2c_writel(i2c, SCB_WRITE_DATA_REG, *i2c->msg.buf);
|
img_i2c_writel(i2c, SCB_WRITE_DATA_REG, *i2c->msg.buf);
|
||||||
img_i2c_wr_rd_fence(i2c);
|
|
||||||
i2c->msg.len--;
|
i2c->msg.len--;
|
||||||
i2c->msg.buf++;
|
i2c->msg.buf++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue