aboutsummaryrefslogtreecommitdiff
path: root/sys/arm64/rockchip
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2021-12-15 08:59:22 +0000
committerAndriy Gapon <avg@FreeBSD.org>2021-12-15 11:16:04 +0000
commit4501b0707198e7ad1da792639a8b164f9380b95d (patch)
tree3dac71cf80316c7e43aa3be262119b95bf71d248 /sys/arm64/rockchip
parent7dc8a0e5dff4ad4c9c10442bef5228a91a98d5d6 (diff)
downloadsrc-4501b0707198e7ad1da792639a8b164f9380b95d.tar.gz
src-4501b0707198e7ad1da792639a8b164f9380b95d.zip
rk_i2c: do not hide NACK condition from consumers
Previously the driver would happily talk to addresses with no device returning some garbage for reads and sending bits into the void for writes. MFC after: 1 week
Diffstat (limited to 'sys/arm64/rockchip')
-rw-r--r--sys/arm64/rockchip/rk_i2c.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/arm64/rockchip/rk_i2c.c b/sys/arm64/rockchip/rk_i2c.c
index 9db6d8739bbd..ef41044e65cb 100644
--- a/sys/arm64/rockchip/rk_i2c.c
+++ b/sys/arm64/rockchip/rk_i2c.c
@@ -453,6 +453,7 @@ rk_i2c_start_xfer(struct rk_i2c_softc *sc, struct iic_msg *msg, boolean_t last)
RK_I2C_IEN_NAKRCVIEN);
}
}
+ reg |= RK_I2C_CON_NAKSTOP;
reg |= sc->mode << RK_I2C_CON_MODE_SHIFT;
reg |= RK_I2C_CON_EN;
RK_I2C_WRITE(sc, RK_I2C_CON, reg);
@@ -572,6 +573,9 @@ rk_i2c_transfer(device_t dev, struct iic_msg *msgs, uint32_t nmsgs)
sc->busy = 0;
+ if (sc->nak_recv)
+ err = IIC_ENOACK;
+
RK_I2C_UNLOCK(sc);
return (err);
}