summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormlelstv <mlelstv@NetBSD.org>2021-06-15 04:41:01 +0000
committermlelstv <mlelstv@NetBSD.org>2021-06-15 04:41:01 +0000
commitb82031103cd9b3bd0ab8740ebd5b3a9b1bc01907 (patch)
tree8c3573b1e9538ae10cace186397905ce73328706 /sys/dev
parent9b2423a8fba55c414be798de7c8ac42c547c7d17 (diff)
iic_acquire_bus may fail.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/i2c/adm1021.c14
-rw-r--r--sys/dev/i2c/dstemp.c17
2 files changed, 18 insertions, 13 deletions
diff --git a/sys/dev/i2c/adm1021.c b/sys/dev/i2c/adm1021.c
index b2f8a1bab6a..31ab7dd1f05 100644
--- a/sys/dev/i2c/adm1021.c
+++ b/sys/dev/i2c/adm1021.c
@@ -1,4 +1,4 @@
-/* $NetBSD: adm1021.c,v 1.27 2021/01/30 01:22:06 thorpej Exp $ */
+/* $NetBSD: adm1021.c,v 1.28 2021/06/15 04:41:01 mlelstv Exp $ */
/* $OpenBSD: adm1021.c,v 1.27 2007/06/24 05:34:35 dlg Exp $ */
/*
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.27 2021/01/30 01:22:06 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: adm1021.c,v 1.28 2021/06/15 04:41:01 mlelstv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -344,7 +344,11 @@ admtemp_attach(device_t parent, device_t self, void *aux)
sc->sc_prop = ia->ia_prop;
prop_object_retain(sc->sc_prop);
- iic_acquire_bus(sc->sc_tag, 0);
+ if (iic_acquire_bus(sc->sc_tag, 0)) {
+ aprint_error_dev(self, "cannot acquire iic bus\n");
+ return;
+ }
+
cmd = ADM1021_CONFIG_READ;
if (admtemp_exec(sc, I2C_OP_READ_WITH_STOP, &cmd, &data) != 0) {
iic_release_bus(sc->sc_tag, 0);
@@ -466,10 +470,8 @@ admtemp_refresh(struct sysmon_envsys *sme, envsys_data_t *edata)
uint8_t cmd, xdata;
int8_t sdata;
- if (iic_acquire_bus(sc->sc_tag, 0)) {
- edata->state = ENVSYS_SINVALID;
+ if (iic_acquire_bus(sc->sc_tag, 0) != 0)
return;
- }
if (edata->sensor == ADMTEMP_INT)
cmd = ADM1021_INT_TEMP;
diff --git a/sys/dev/i2c/dstemp.c b/sys/dev/i2c/dstemp.c
index 7d8423d9447..10734da8f9d 100644
--- a/sys/dev/i2c/dstemp.c
+++ b/sys/dev/i2c/dstemp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: dstemp.c,v 1.12 2021/03/01 04:39:45 rin Exp $ */
+/* $NetBSD: dstemp.c,v 1.13 2021/06/15 04:41:01 mlelstv Exp $ */
/*-
* Copyright (c) 2018 Michael Lorenz
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.12 2021/03/01 04:39:45 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dstemp.c,v 1.13 2021/06/15 04:41:01 mlelstv Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -145,7 +145,8 @@ dstemp_init(struct dstemp_softc *sc)
int error;
uint8_t cmd[2], data;
- iic_acquire_bus(sc->sc_i2c, 0);
+ if (iic_acquire_bus(sc->sc_i2c, 0))
+ return;
cmd[0] = DSTEMP_CONFIG;
data = 0;
error = iic_exec(sc->sc_i2c, I2C_OP_READ_WITH_STOP,
@@ -171,10 +172,12 @@ dstemp_sensors_refresh(struct sysmon_envsys *sme, envsys_data_t *edata)
int error;
- iic_acquire_bus(sc->sc_i2c, 0);
- error = iic_exec(sc->sc_i2c, I2C_OP_READ_WITH_STOP,
- sc->sc_addr, &cmd, 1, &data, 2, 0);
- iic_release_bus(sc->sc_i2c, 0);
+ error = iic_acquire_bus(sc->sc_i2c, 0);
+ if (error == 0) {
+ error = iic_exec(sc->sc_i2c, I2C_OP_READ_WITH_STOP,
+ sc->sc_addr, &cmd, 1, &data, 2, 0);
+ iic_release_bus(sc->sc_i2c, 0);
+ }
if (error) {
edata->state = ENVSYS_SINVALID;