]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
i2c: qup: send NACK for last read sub transfers
authorAbhishek Sahu <absahu@codeaurora.org>
Mon, 12 Mar 2018 13:15:00 +0000 (18:45 +0530)
committerWolfram Sang <wsa@the-dreams.de>
Sat, 24 Mar 2018 12:20:41 +0000 (13:20 +0100)
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 <absahu@codeaurora.org>
Reviewed-by: Austin Christ <austinwc@codeaurora.org>
Reviewed-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/busses/i2c-qup.c

index 5bb7ebe70f3cb2246f85b36d69f5f759fd43e4d0..4ebd9226dd879d060dccb22c4f2f1e8f9445ddc2 100644 (file)
 #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;
        }