Module Name:    src
Committed By:   christos
Date:           Sat Dec 30 03:18:26 UTC 2017

Modified Files:
        src/sys/dev/i2c: am2315.c si70xx.c

Log Message:
fixes from Brad Spenser


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/am2315.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/i2c/si70xx.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/dev/i2c/am2315.c
diff -u src/sys/dev/i2c/am2315.c:1.1 src/sys/dev/i2c/am2315.c:1.2
--- src/sys/dev/i2c/am2315.c:1.1	Thu Dec 28 18:23:47 2017
+++ src/sys/dev/i2c/am2315.c	Fri Dec 29 22:18:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: am2315.c,v 1.1 2017/12/28 23:23:47 christos Exp $	*/
+/*	$NetBSD: am2315.c,v 1.2 2017/12/30 03:18:26 christos Exp $	*/
 
 /*
  * Copyright (c) 2017 Brad Spencer <b...@anduin.eldar.org>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am2315.c,v 1.1 2017/12/28 23:23:47 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am2315.c,v 1.2 2017/12/30 03:18:26 christos Exp $");
 
 /*
  * Driver for the Aosong AM2315
@@ -153,16 +153,16 @@ am2315_poke_m(i2c_tag_t tag, i2c_addr_t 
 	if (debug)
 		printf("%s: poke 1: %d\n", name, error);
 
-	if (error != 0)
+	if (error)
 		delay(2800);
 
 	error = am2315_cmd(tag, addr, AM2315_READ_REGISTERS,
 	    AM2315_REGISTER_STATUS, 1, buf, __arraycount(buf));
 	if (debug)
-	    printf("%s: poke 2: %d %02x %02x %02x %02x%02x\n", name, error,
-		buf[0], buf[1], buf[2], buf[3], buf[4]);
+		printf("%s: poke 2: %d %02x %02x %02x %02x%02x\n", name, error,
+		    buf[0], buf[1], buf[2], buf[3], buf[4]);
 
-	if (error != 0)
+	if (error)
 		delay(2800);
 	return error;
 }
@@ -204,6 +204,7 @@ am2315_match(device_t parent, cfdata_t m
 		return 0;
 	}
 
+	iic_release_bus(ia->ia_tag, 0);
 	return 1;
 }
 
@@ -299,7 +300,7 @@ am2315_attach(device_t parent, device_t 
 	    && crc == readcrc;
 
 	error = am2315_read_regs(sc, AM2315_REGISTER_VERSION, 1, buf, 5);
-	if (error != 0)
+	if (error)
 		aprint_error_dev(self, "read chipver: %d\n", error);
 	readcrc = buf[4] << 8 | buf[3];
 	crc = am2315_crc(buf, 3);
@@ -309,7 +310,7 @@ am2315_attach(device_t parent, device_t 
 	    && crc == readcrc;
 
 	error = am2315_read_regs(sc, AM2315_REGISTER_ID_PT_24_31, 2, buf, 6);
-	if (error != 0)
+	if (error)
 		aprint_error_dev(self, "read id 1: %d\n", error);
 	readcrc = buf[5] << 8 | buf[4];
 	crc = am2315_crc(buf, 4);
@@ -319,7 +320,7 @@ am2315_attach(device_t parent, device_t 
 	    && crc == readcrc;
 
 	error = am2315_read_regs(sc, AM2315_REGISTER_ID_PT_8_15, 2, buf, 6);
-	if (error != 0)
+	if (error)
 		aprint_error_dev(self, "read id 2: %d\n", error);
 	readcrc = buf[5] << 8 | buf[4];
 	crc = am2315_crc(buf, 4);
@@ -392,7 +393,7 @@ am2315_refresh(struct sysmon_envsys * sm
 
 	mutex_enter(&sc->sc_mutex);
 	error = iic_acquire_bus(sc->sc_tag, 0);
-	if (error == 0) {
+	if (error) {
 		DPRINTF(sc, 2, ("%s: Could not acquire i2c bus: %d\n",
 		    device_xname(sc->sc_dev), error));
 		goto out;
@@ -415,8 +416,8 @@ am2315_refresh(struct sysmon_envsys * sm
 		am2315_poke(sc);
 
 		if ((error = am2315_read_regs(sc, thecommand, 2, buf, 6)) != 0)
-			aprint_error_dev(sc->sc_dev,
-			    "Read sensor %d error: %d\n", edata->sensor, error);
+			  DPRINTF(sc, 2, ("%s: Read sensor %d error: %d\n",
+			      device_xname(sc->sc_dev),edata->sensor, error));
 
 		readcrc = buf[5] << 8 | buf[4];
 		crc = am2315_crc(buf, 4);

Index: src/sys/dev/i2c/si70xx.c
diff -u src/sys/dev/i2c/si70xx.c:1.2 src/sys/dev/i2c/si70xx.c:1.3
--- src/sys/dev/i2c/si70xx.c:1.2	Thu Dec 28 21:19:45 2017
+++ src/sys/dev/i2c/si70xx.c	Fri Dec 29 22:18:26 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: si70xx.c,v 1.2 2017/12/29 02:19:45 christos Exp $	*/
+/*	$NetBSD: si70xx.c,v 1.3 2017/12/30 03:18:26 christos Exp $	*/
 
 /*
  * Copyright (c) 2017 Brad Spencer <b...@anduin.eldar.org>
@@ -17,7 +17,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: si70xx.c,v 1.2 2017/12/29 02:19:45 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: si70xx.c,v 1.3 2017/12/30 03:18:26 christos Exp $");
 
 /*
   Driver for the Silicon Labs SI7013/SI7020/SI7021
@@ -202,12 +202,10 @@ si70xx_verify_sysctl_heatervalue(SYSCTLF
 	return error;
 }
 
-static int
-si70xx_cmd(i2c_tag_t tag, i2c_addr_t addr, uint8_t *cmd,
-    uint8_t clen, uint8_t *buf, size_t blen)
+static uint8_t
+si70xx_dir(uint8_t cmd, size_t len)
 {
-	uint8_t dir;
-	switch (cmd[0]) {
+	switch (cmd) {
 	case SI70XX_READ_USER_REG_1:
 	case SI70XX_READ_HEATER_REG:
 	case SI70XX_READ_ID_PT1A:
@@ -216,22 +214,33 @@ si70xx_cmd(i2c_tag_t tag, i2c_addr_t add
 	case SI70XX_READ_ID_PT2B:
 	case SI70XX_READ_FW_VERA:
 	case SI70XX_READ_FW_VERB:
-	    dir = I2C_OP_READ_WITH_STOP;
-	    break;
+		return I2C_OP_READ_WITH_STOP;
 	case SI70XX_WRITE_USER_REG_1:
 	case SI70XX_WRITE_HEATER_REG:
 	case SI70XX_RESET:
-	    dir = I2C_OP_WRITE_WITH_STOP;
-	    break;
+		return I2C_OP_WRITE_WITH_STOP;
 	case SI70XX_MEASURE_RH_NOHOLD:
 	case SI70XX_MEASURE_TEMP_NOHOLD:
-	    dir = blen == 0 ? I2C_OP_READ : I2C_OP_READ_WITH_STOP;
-	    break;
+		return len == 0 ? I2C_OP_READ : I2C_OP_READ_WITH_STOP;
 	default:
-	    panic("%s: bad command %#x\n", __func__, cmd[0]);
+		panic("%s: bad command %#x\n", __func__, cmd);
+		return 0;
 	}
+}
+
+static int
+si70xx_cmd(i2c_tag_t tag, i2c_addr_t addr, uint8_t *cmd,
+    uint8_t clen, uint8_t *buf, size_t blen)
+{
+	uint8_t dir;
+	if (clen == 0)
+		dir = blen == 0 ? I2C_OP_READ : I2C_OP_READ_WITH_STOP;
+	else
+		dir = si70xx_dir(cmd[0], blen);
+
+	if (dir == I2C_OP_READ || dir == I2C_OP_READ_WITH_STOP)
+		memset(buf, 0, blen);
 
-	memset(buf, 0, blen);
 	return iic_exec(tag, dir, addr, cmd, clen, buf, blen, 0);
 }
 
@@ -359,7 +368,7 @@ si70xx_set_heatervalue(struct si70xx_sc 
 	DPRINTF(sc, 2, ("%s:%s: heater values after: %#x\n",
 	    device_xname(sc->sc_dev), __func__, heaterregister));
 
-	error = si70xx_cmd1(sc, SI70XX_WRITE_USER_REG_1, &heaterregister, 1);
+	error = si70xx_cmd1(sc, SI70XX_WRITE_HEATER_REG, &heaterregister, 1);
 	if (error) {
 		DPRINTF(sc, 2, ("%s: Failed to write heater register: %d\n",
 		    device_xname(sc->sc_dev), error));
@@ -610,7 +619,7 @@ si70xx_attach(device_t parent, device_t 
 #ifdef HAVE_I2C_EXECV
 	sc->sc_clockstretch = 2048;
 #endif
-	sc->sc_readattempts = 15;
+	sc->sc_readattempts = 25;
 	sc->sc_ignorecrc = false;
 	sc->sc_sme = NULL;
 
@@ -877,9 +886,7 @@ si70xx_exec(struct si70xx_sc *sc, uint8_
 			break;
 		DPRINTF(sc, 2, ("%s: Failed to read NO HOLD RH"
 		    " %d %d\n", device_xname(sc->sc_dev), 2, error));
-		if (aint < 10) {
-			delay(1000);
-		}
+		delay(1000);
 	}
 #endif
 
@@ -933,11 +940,11 @@ si70xx_refresh(struct sysmon_envsys * sm
 	}
 	switch (edata->sensor) {
 	case SI70XX_HUMIDITY_SENSOR:
-		error = si70xx_exec(sc, SI70XX_MEASURE_RH_HOLD, edata);
+		error = si70xx_exec(sc, SI70XX_MEASURE_RH_NOHOLD, edata);
 		break;
 
 	case SI70XX_TEMP_SENSOR:
-		error = si70xx_exec(sc, SI70XX_MEASURE_TEMP_HOLD, edata);
+		error = si70xx_exec(sc, SI70XX_MEASURE_TEMP_NOHOLD, edata);
 		break;
 	default:
 		error = EINVAL;

Reply via email to