Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/i2c iic_acquire_bus can fail.



details:   https://anonhg.NetBSD.org/src/rev/7021ded45648
branches:  trunk
changeset: 379650:7021ded45648
user:      mlelstv <mlelstv%NetBSD.org@localhost>
date:      Sun Jun 13 09:46:04 2021 +0000

description:
iic_acquire_bus can fail.

diffstat:

 sys/dev/i2c/lm75.c |  28 +++++++++++++++++++---------
 sys/dev/i2c/lm87.c |   7 ++++---
 2 files changed, 23 insertions(+), 12 deletions(-)

diffs (119 lines):

diff -r 3be880b510eb -r 7021ded45648 sys/dev/i2c/lm75.c
--- a/sys/dev/i2c/lm75.c        Sun Jun 13 09:32:01 2021 +0000
+++ b/sys/dev/i2c/lm75.c        Sun Jun 13 09:46:04 2021 +0000
@@ -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,
diff -r 3be880b510eb -r 7021ded45648 sys/dev/i2c/lm87.c
--- a/sys/dev/i2c/lm87.c        Sun Jun 13 09:32:01 2021 +0000
+++ b/sys/dev/i2c/lm87.c        Sun Jun 13 09:46:04 2021 +0000
@@ -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);



Home | Main Index | Thread Index | Old Index