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