Module Name:    src
Committed By:   jmcneill
Date:           Tue Sep 25 22:23:22 UTC 2018

Modified Files:
        src/sys/arch/arm/nvidia: tegra_i2c.c

Log Message:
Disallow 0-byte transfers and suppress timeout messages


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_i2c.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/nvidia/tegra_i2c.c
diff -u src/sys/arch/arm/nvidia/tegra_i2c.c:1.21 src/sys/arch/arm/nvidia/tegra_i2c.c:1.22
--- src/sys/arch/arm/nvidia/tegra_i2c.c:1.21	Mon Sep  3 16:29:23 2018
+++ src/sys/arch/arm/nvidia/tegra_i2c.c	Tue Sep 25 22:23:22 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_i2c.c,v 1.21 2018/09/03 16:29:23 riastradh Exp $ */
+/* $NetBSD: tegra_i2c.c,v 1.22 2018/09/25 22:23:22 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_i2c.c,v 1.21 2018/09/03 16:29:23 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_i2c.c,v 1.22 2018/09/25 22:23:22 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -275,6 +275,9 @@ tegra_i2c_exec(void *priv, i2c_op_t op, 
 
 	KASSERT(mutex_owned(&sc->sc_lock));
 
+	if (buflen == 0 && cmdlen == 0)
+		return EINVAL;
+
 	if ((flags & I2C_F_POLL) == 0) {
 		I2C_WRITE(sc, I2C_INTERRUPT_MASK_REG,
 		    I2C_INTERRUPT_MASK_NOACK | I2C_INTERRUPT_MASK_ARB_LOST |
@@ -305,10 +308,12 @@ tegra_i2c_exec(void *priv, i2c_op_t op, 
 		}
 	}
 
-	if (I2C_OP_READ_P(op)) {
-		error = tegra_i2c_read(sc, addr, buf, buflen, flags);
-	} else {
-		error = tegra_i2c_write(sc, addr, buf, buflen, flags, false);
+	if (buflen > 0) {
+		if (I2C_OP_READ_P(op)) {
+			error = tegra_i2c_read(sc, addr, buf, buflen, flags);
+		} else {
+			error = tegra_i2c_write(sc, addr, buf, buflen, flags, false);
+		}
 	}
 
 done:
@@ -348,8 +353,9 @@ tegra_i2c_wait(struct tegra_i2c_softc *s
 		}
 	}
 	if (retry == 0) {
-		stat = I2C_READ(sc, I2C_INTERRUPT_STATUS_REG);
+#ifdef TEGRA_I2C_DEBUG
 		device_printf(sc->sc_dev, "timed out, status = %#x\n", stat);
+#endif
 		return ETIMEDOUT;
 	}
 

Reply via email to