Messages in this thread | | | Date | Mon, 29 Nov 2021 20:01:11 +0100 | From | Wolfram Sang <> | Subject | Re: [PATCH v3] i2c: bcm-iproc: Add i2c recovery support |
| |
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
[unhandled content-type:application/pgp-signature] | |