From 0f24a0c19764247ef0601fd3a8a26f9b78e2a6e8 Mon Sep 17 00:00:00 2001 From: Christoffer Zakrisson Date: Mon, 27 Sep 2021 20:05:31 +0200 Subject: [PATCH] drivers: i2c: sam0 Fix i2c NACK on receive PR #38482 made the sam0 i2c send NACK when receiving a single message Fixes #38878 Fixes #41016 Signed-off-by: Christoffer Zakrisson --- drivers/i2c/i2c_sam0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/i2c_sam0.c b/drivers/i2c/i2c_sam0.c index ee8e4796c6ab7..576758b88d932 100644 --- a/drivers/i2c/i2c_sam0.c +++ b/drivers/i2c/i2c_sam0.c @@ -162,7 +162,7 @@ static void i2c_sam0_isr(const struct device *dev) data->msg.buffer++; data->msg.size--; } else if (status & SERCOM_I2CM_INTFLAG_SB) { - if (!continue_next) { + if (!continue_next && (data->msg.size == 1)) { /* * If this is the last byte, then prepare for an auto * NACK before doing the actual read. This does not @@ -175,7 +175,7 @@ static void i2c_sam0_isr(const struct device *dev) data->msg.buffer++; data->msg.size--; - if (!continue_next) { + if (!continue_next && !data->msg.size) { i2c->INTENCLR.reg = SERCOM_I2CM_INTENCLR_MASK; k_sem_give(&data->sem); return;