Module Name:    src
Committed By:   mlelstv
Date:           Sun Jun 13 09:46:04 UTC 2021

Modified Files:
        src/sys/dev/i2c: lm75.c lm87.c

Log Message:
iic_acquire_bus can fail.


To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/dev/i2c/lm75.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/i2c/lm87.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/lm75.c
diff -u src/sys/dev/i2c/lm75.c:1.43 src/sys/dev/i2c/lm75.c:1.44
--- src/sys/dev/i2c/lm75.c:1.43	Fri May 21 20:42:05 2021
+++ src/sys/dev/i2c/lm75.c	Sun Jun 13 09:46:04 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lm75.c,v 1.43 2021/05/21 20:42:05 macallan Exp $	*/
+/*	$NetBSD: lm75.c,v 1.44 2021/06/13 09:46:04 mlelstv Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.43 2021/05/21 20:42:05 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lm75.c,v 1.44 2021/06/13 09:46:04 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -230,7 +230,11 @@ lmtemp_attach(device_t parent, device_t 
 	sc->sc_lmtemp_decode = lmtemptbl[i].lmtemp_decode;
 	sc->sc_lmtemp_encode = lmtemptbl[i].lmtemp_encode;
 
-	iic_acquire_bus(sc->sc_tag, 0);
+	if (iic_acquire_bus(sc->sc_tag, 0)) {
+		aprint_error_dev(self,
+		    "unable to acquire I2C bus\n");
+		return;
+	}
 
 	/* Read temperature limit(s) and remember initial value(s). */
 	if (i == lmtemp_lm77) {
@@ -378,7 +382,8 @@ lmtemp_refresh(struct sysmon_envsys *sme
 {
 	struct lmtemp_softc *sc = sme->sme_cookie;
 
-	iic_acquire_bus(sc->sc_tag, 0);	/* also locks our instance */
+	if (iic_acquire_bus(sc->sc_tag, 0))	/* also locks our instance */
+		return;
 	lmtemp_refresh_sensor_data(sc);
 	iic_release_bus(sc->sc_tag, 0);	/* also unlocks our instance */
 }
@@ -392,7 +397,8 @@ lmtemp_getlim_lm75(struct sysmon_envsys 
 
 	*props &= ~(PROP_CRITMAX);
 
-	iic_acquire_bus(sc->sc_tag, 0);
+	if (iic_acquire_bus(sc->sc_tag, 0))
+		return;
 	if (lmtemp_temp_read(sc, LM75_REG_TOS_SET_POINT, &val, 0) == 0) {
 		limits->sel_critmax = val;
 		*props |= PROP_CRITMAX;
@@ -409,7 +415,8 @@ lmtemp_getlim_lm77(struct sysmon_envsys 
 
 	*props &= ~(PROP_CRITMAX | PROP_WARNMAX | PROP_WARNMIN);
 
-	iic_acquire_bus(sc->sc_tag, 0);
+	if (iic_acquire_bus(sc->sc_tag, 0))
+		return;
 	if (lmtemp_temp_read(sc, LM77_REG_TCRIT_SET_POINT, &val, 0) == 0) {
 		limits->sel_critmax = val;
 		*props |= PROP_CRITMAX;
@@ -437,7 +444,8 @@ lmtemp_setlim_lm75(struct sysmon_envsys 
 			limit = sc->sc_smax;
 		else
 			limit = limits->sel_critmax;
-		iic_acquire_bus(sc->sc_tag, 0);
+		if (iic_acquire_bus(sc->sc_tag, 0))
+			return;
 		lmtemp_temp_write(sc, LM75_REG_THYST_SET_POINT,
 		    limit - 5000000, 0);
 		lmtemp_temp_write(sc, LM75_REG_TOS_SET_POINT, limit, 0);
@@ -608,7 +616,7 @@ sysctl_lm75_temp(SYSCTLFN_ARGS)
 {
 	struct sysctlnode node = *rnode;
 	struct lmtemp_softc *sc = node.sysctl_data;
-	int temp;
+	int temp, error;
 
 	if (newp) {
 
@@ -618,7 +626,9 @@ sysctl_lm75_temp(SYSCTLFN_ARGS)
 
 			temp = *(int *)node.sysctl_data;
 			sc->sc_tmax = temp;
-			iic_acquire_bus(sc->sc_tag, 0);
+			error = iic_acquire_bus(sc->sc_tag, 0);
+			if (error)
+				return error;
 			lmtemp_temp_write(sc, LM75_REG_THYST_SET_POINT,
 			    sc->sc_tmax - 5, 1);
 			lmtemp_temp_write(sc, LM75_REG_TOS_SET_POINT,

Index: src/sys/dev/i2c/lm87.c
diff -u src/sys/dev/i2c/lm87.c:1.14 src/sys/dev/i2c/lm87.c:1.15
--- src/sys/dev/i2c/lm87.c:1.14	Wed Jan 27 02:29:48 2021
+++ src/sys/dev/i2c/lm87.c	Sun Jun 13 09:46:04 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lm87.c,v 1.14 2021/01/27 02:29:48 thorpej Exp $	*/
+/*	$NetBSD: lm87.c,v 1.15 2021/06/13 09:46:04 mlelstv Exp $	*/
 /*	$OpenBSD: lm87.c,v 1.20 2008/11/10 05:19:48 cnst Exp $	*/
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lm87.c,v 1.14 2021/01/27 02:29:48 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lm87.c,v 1.15 2021/06/13 09:46:04 mlelstv Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -162,7 +162,8 @@ lmenv_match(device_t parent, cfdata_t ma
 		return 0;
 
 	cmd = LM87_COMPANY_ID;
-	iic_acquire_bus(ia->ia_tag, 0);
+	if (iic_acquire_bus(ia->ia_tag, 0))
+		return 0;
 	error = iic_exec(ia->ia_tag, I2C_OP_READ_WITH_STOP, ia->ia_addr,
 	    &cmd, 1, &val, 1, 0);
 	iic_release_bus(ia->ia_tag, 0);

Reply via email to