Re: [PATCH 2/2] i2c: sprd: Fix the i2c count issue

2018-04-27 Thread Wolfram Sang
On Mon, Apr 09, 2018 at 02:40:55PM +0800, Baolin Wang wrote:
> 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 

Applied to for-current, thanks!



signature.asc
Description: PGP signature


Re: [PATCH 2/2] i2c: sprd: Fix the i2c count issue

2018-04-27 Thread Wolfram Sang
On Mon, Apr 09, 2018 at 02:40:55PM +0800, Baolin Wang wrote:
> 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 

Applied to for-current, thanks!



signature.asc
Description: PGP signature


[PATCH 2/2] i2c: sprd: Fix the i2c count issue

2018-04-09 Thread Baolin Wang
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 
---
 drivers/i2c/busses/i2c-sprd.c |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-sprd.c b/drivers/i2c/busses/i2c-sprd.c
index 2fdad63..4053259 100644
--- a/drivers/i2c/busses/i2c-sprd.c
+++ b/drivers/i2c/busses/i2c-sprd.c
@@ -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
-- 
1.7.9.5



[PATCH 2/2] i2c: sprd: Fix the i2c count issue

2018-04-09 Thread Baolin Wang
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 
---
 drivers/i2c/busses/i2c-sprd.c |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-sprd.c b/drivers/i2c/busses/i2c-sprd.c
index 2fdad63..4053259 100644
--- a/drivers/i2c/busses/i2c-sprd.c
+++ b/drivers/i2c/busses/i2c-sprd.c
@@ -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
-- 
1.7.9.5