Re: [PATCH v3] i2c: bcm-iproc: Add i2c recovery support
From: Wolfram Sang <wsa@kernel.org>
Date: 2021-11-29 19:03:18
Also in:
linux-i2c, lkml
From: Wolfram Sang <wsa@kernel.org>
Date: 2021-11-29 19:03:18
Also in:
linux-i2c, lkml
Hi Chris, sorry for the long delay. All looks good except for this:
@@ -806,6 +954,7 @@ static int bcm_iproc_i2c_xfer_wait(struct bcm_iproc_i2c_dev *iproc_i2c, /* flush both TX/RX FIFOs */ val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT); iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); + iproc_i2c_lockup_recover(iproc_i2c); return -ETIMEDOUT; }@@ -814,6 +963,7 @@ static int bcm_iproc_i2c_xfer_wait(struct bcm_iproc_i2c_dev *iproc_i2c, /* flush both TX/RX FIFOs */ val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT); iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); + iproc_i2c_lockup_recover(iproc_i2c); return ret; }
I2C specs suggest recovery at the beginning of a transfer when SDA is detected low. Not at the end of a transfer. Happy hacking, Wolfram