summaryrefslogtreecommitdiff
path: root/drivers/i2c/npcm_i2c.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2025-10-06 13:20:24 -0600
committerTom Rini <trini@konsulko.com>2025-10-06 13:20:24 -0600
commit0eaa4b337336dbbe93395d1f2ccc18937eaafea2 (patch)
treec01e661d69181dceca68f56a4849a9bd04608521 /drivers/i2c/npcm_i2c.c
parente50b1e8715011def8aff1588081a2649a2c6cd47 (diff)
parent4e4a9de31de2a5f395ee25c59e4026422fbcb27e (diff)
Merge branch 'next'
Merge the outstanding changes from the 'next' branch to master.
Diffstat (limited to 'drivers/i2c/npcm_i2c.c')
-rw-r--r--drivers/i2c/npcm_i2c.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/i2c/npcm_i2c.c b/drivers/i2c/npcm_i2c.c
index c64752e1467..bff0d04f1a5 100644
--- a/drivers/i2c/npcm_i2c.c
+++ b/drivers/i2c/npcm_i2c.c
@@ -34,6 +34,7 @@
#define SMBCTL3_SDA_LVL BIT(6)
/* SMBCST */
+#define SMBCST_BUSY BIT(0)
#define SMBCST_BB BIT(1)
#define SMBCST_TGSCL BIT(5)
@@ -479,11 +480,17 @@ static int npcm_i2c_xfer(struct udevice *dev,
struct npcm_i2c_bus *bus = dev_get_priv(dev);
struct npcm_i2c_regs *reg = bus->reg;
int ret = 0, err = 0;
+ u8 val;
if (nmsgs < 1 || nmsgs > 2) {
printf("%s: commands not support\n", __func__);
return -EREMOTEIO;
}
+
+ /* Wait for module out of busy */
+ if (readb_poll_timeout(&reg->cst, val, !(val & SMBCST_BUSY), 1000))
+ return -EBUSY;
+
/* clear ST register */
writeb(0xFF, &reg->st);