According to I2c specification, “If a master-receiver sends a
repeated START condition, it sends a not-acknowledge (A) just
before the repeated START condition”. QUP v2 supports sending
of NACK without stop with QUP_TAG_V2_DATARD_NACK so added the
same.

Signed-off-by: Abhishek Sahu <abs...@codeaurora.org>
Reviewed-by: Austin Christ <austi...@codeaurora.org>
Reviewed-by: Andy Gross <andy.gr...@linaro.org>
---

* Changes from v1: None

 drivers/i2c/busses/i2c-qup.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
index 5bb7ebe..4ebd922 100644
--- a/drivers/i2c/busses/i2c-qup.c
+++ b/drivers/i2c/busses/i2c-qup.c
@@ -104,6 +104,7 @@
 #define QUP_TAG_V2_DATAWR              0x82
 #define QUP_TAG_V2_DATAWR_STOP         0x83
 #define QUP_TAG_V2_DATARD              0x85
+#define QUP_TAG_V2_DATARD_NACK         0x86
 #define QUP_TAG_V2_DATARD_STOP         0x87
 
 /* Status, Error flags */
@@ -606,7 +607,9 @@ static int qup_i2c_set_tags(u8 *tags, struct qup_i2c_dev 
*qup,
                        tags[len++] = QUP_TAG_V2_DATAWR_STOP;
        } else {
                if (msg->flags & I2C_M_RD)
-                       tags[len++] = QUP_TAG_V2_DATARD;
+                       tags[len++] = qup->blk.pos == (qup->blk.count - 1) ?
+                                     QUP_TAG_V2_DATARD_NACK :
+                                     QUP_TAG_V2_DATARD;
                else
                        tags[len++] = QUP_TAG_V2_DATAWR;
        }
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of 
Code Aurora Forum, hosted by The Linux Foundation

Reply via email to