We can mark the transfer as complete without waiting for the stop
bit. This is important when handling repeated start transfers as
we have to start the next transfer without the stop bit being issued.

This doesn't affect the older versions of the IP.

Signed-off-by: Sifan Naeem <[email protected]>
---
 drivers/i2c/busses/i2c-img-scb.c |   15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/i2c/busses/i2c-img-scb.c b/drivers/i2c/busses/i2c-img-scb.c
index e27c3e0..efad4d7 100644
--- a/drivers/i2c/busses/i2c-img-scb.c
+++ b/drivers/i2c/busses/i2c-img-scb.c
@@ -911,16 +911,11 @@ static unsigned int img_i2c_auto(struct img_i2c *i2c,
                }
        } else {
                if (int_status & INT_FIFO_EMPTY_EMPTYING) {
-                       /*
-                        * The write fifo empty indicates that we're in the
-                        * last byte so it's safe to start a new write
-                        * transaction without losing any bytes from the
-                        * previous one.
-                        * see 2.3.7 Repeated Start Transactions.
-                        */
-                       if ((int_status & INT_FIFO_EMPTY) &&
-                           i2c->msg.len == 0)
-                               return ISR_WAITSTOP;
+                       if (i2c->msg.len == 0) {
+                               if (i2c->last_msg)
+                                       return ISR_WAITSTOP;
+                               return ISR_COMPLETE(0);
+                       }
                        img_i2c_write_fifo(i2c);
                }
        }
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to