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; }