mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-12 07:14:03 +08:00
i2c: sprd: Fix the i2c count issue
We found the I2C controller count register is unreliable sometimes, that will cause I2C to lose data. Thus we can read the data count from 'i2c_dev->count' instead of the I2C controller count register. Signed-off-by: Baolin Wang <baolin.wang@linaro.org> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
parent
da33aa03fa
commit
2a01046120
@ -368,13 +368,12 @@ static irqreturn_t sprd_i2c_isr_thread(int irq, void *dev_id)
|
||||
struct sprd_i2c *i2c_dev = dev_id;
|
||||
struct i2c_msg *msg = i2c_dev->msg;
|
||||
bool ack = !(readl(i2c_dev->base + I2C_STATUS) & I2C_RX_ACK);
|
||||
u32 i2c_count = readl(i2c_dev->base + I2C_COUNT);
|
||||
u32 i2c_tran;
|
||||
|
||||
if (msg->flags & I2C_M_RD)
|
||||
i2c_tran = i2c_dev->count >= I2C_FIFO_FULL_THLD;
|
||||
else
|
||||
i2c_tran = i2c_count;
|
||||
i2c_tran = i2c_dev->count;
|
||||
|
||||
/*
|
||||
* If we got one ACK from slave when writing data, and we did not
|
||||
@ -412,14 +411,13 @@ static irqreturn_t sprd_i2c_isr(int irq, void *dev_id)
|
||||
{
|
||||
struct sprd_i2c *i2c_dev = dev_id;
|
||||
struct i2c_msg *msg = i2c_dev->msg;
|
||||
u32 i2c_count = readl(i2c_dev->base + I2C_COUNT);
|
||||
bool ack = !(readl(i2c_dev->base + I2C_STATUS) & I2C_RX_ACK);
|
||||
u32 i2c_tran;
|
||||
|
||||
if (msg->flags & I2C_M_RD)
|
||||
i2c_tran = i2c_dev->count >= I2C_FIFO_FULL_THLD;
|
||||
else
|
||||
i2c_tran = i2c_count;
|
||||
i2c_tran = i2c_dev->count;
|
||||
|
||||
/*
|
||||
* If we did not get one ACK from slave when writing data, then we
|
||||
|
Loading…
Reference in New Issue
Block a user