Merge tag 'for-v2023.01-rc2' of https://source.denx.de/u-boot/custodians/u-boot-i2c

i2c Fixes for v2023.01-rc2

- i2c-gpio: add a missing new line in printed string
  detected and fixed by Sergei

- microchip i2c driver fixes from Conor
  - fix erroneous late ack send
  - fix ack sending logic
diff --git a/drivers/i2c/i2c-gpio.c b/drivers/i2c/i2c-gpio.c
index 1aedad5..4ed9e9e 100644
--- a/drivers/i2c/i2c-gpio.c
+++ b/drivers/i2c/i2c-gpio.c
@@ -362,7 +362,7 @@
 
 	return 0;
 error:
-	pr_err("Can't get %s gpios! Error: %d", dev->name, ret);
+	pr_err("Can't get %s gpios! Error: %d\n", dev->name, ret);
 	return ret;
 }
 
diff --git a/drivers/i2c/i2c-microchip.c b/drivers/i2c/i2c-microchip.c
index 12f65d0..d82b80f 100644
--- a/drivers/i2c/i2c-microchip.c
+++ b/drivers/i2c/i2c-microchip.c
@@ -2,8 +2,9 @@
 /*
  * Microchip I2C controller driver
  *
- * Copyright (C) 2021 Microchip Technology Inc.
+ * Copyright (C) 2021-2022 Microchip Technology Inc.
  * Padmarao Begari <padmarao.begari@microchip.com>
+ * Conor Dooley <conor.dooley@microchip.com>
  */
 #include <common.h>
 #include <clk.h>
@@ -223,7 +224,7 @@
 		bus->msg_len--;
 	}
 
-	if (bus->msg_len == 0) {
+	if (bus->msg_len <= 1) {
 		ctrl = readl(bus->base + MPFS_I2C_CTRL);
 		ctrl &= ~CTRL_AA;
 		writel(ctrl, bus->base + MPFS_I2C_CTRL);
@@ -265,10 +266,18 @@
 		}
 		break;
 	case STATUS_M_SLAR_ACK:
-		ctrl = readl(bus->base + MPFS_I2C_CTRL);
-		ctrl |= CTRL_AA;
-		writel(ctrl, bus->base + MPFS_I2C_CTRL);
-		if (bus->msg_len == 0) {
+		if (bus->msg_len > 1u) {
+			ctrl = readl(bus->base + MPFS_I2C_CTRL);
+			ctrl |= CTRL_AA;
+			writel(ctrl, bus->base + MPFS_I2C_CTRL);
+		} else if (bus->msg_len == 1u) {
+			ctrl = readl(bus->base + MPFS_I2C_CTRL);
+			ctrl &= ~CTRL_AA;
+			writel(ctrl, bus->base + MPFS_I2C_CTRL);
+		} else {
+			ctrl = readl(bus->base + MPFS_I2C_CTRL);
+			ctrl |= CTRL_AA;
+			writel(ctrl, bus->base + MPFS_I2C_CTRL);
 			/* On the last byte to be transmitted, send STOP */
 			mpfs_i2c_stop(bus);
 			finish = true;
@@ -276,6 +285,9 @@
 		break;
 	case STATUS_M_RX_DATA_ACKED:
 		mpfs_i2c_empty_rx(bus);
+		break;
+	case STATUS_M_RX_DATA_NACKED:
+		mpfs_i2c_empty_rx(bus);
 		if (bus->msg_len == 0) {
 			/* On the last byte to be transmitted, send STOP */
 			mpfs_i2c_stop(bus);
@@ -283,7 +295,6 @@
 		}
 		break;
 	case STATUS_M_TX_DATA_NACK:
-	case STATUS_M_RX_DATA_NACKED:
 	case STATUS_M_SLAR_NACK:
 	case STATUS_M_SLAW_NACK:
 		bus->msg_err = -ENXIO;