From: Kevin Hao <kexin....@windriver.com> After the merge of stable v5.15.122 stable kernel (commit 4900bde55da2), two blocks to handle the BNB (bus not busy) interrupt were introduced. One was added by SDK commit 622176d24add ("i2c: xiic: Fix Tx Interrupt path for grouped messages"), and the other was added by stable commit 9eaef43fef90 ("i2c: xiic: Defer xiic_wakeup() and __xiic_start_xfer() in xiic_process()"). So drop the codes introduced by the SDK commit and also restore a bug fix in the original code introduced by SDK commit 19d54cfd5ccb ("i2c: xiic: Add smbus_block_read functionality").
Signed-off-by: Kevin Hao <kexin....@windriver.com> --- Hi Bruce, Please help me merge this into the following two branches: v5.15/standard/sdkv5.15/xlnx-soc v5.15/standard/preempt-rt/sdkv5.15/xlnx-soc drivers/i2c/busses/i2c-xiic.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c index c63cd2e50e13..c490f0ee250e 100644 --- a/drivers/i2c/busses/i2c-xiic.c +++ b/drivers/i2c/busses/i2c-xiic.c @@ -700,6 +700,12 @@ static irqreturn_t xiic_process(int irq, void *dev_id) /* The bus is not busy, disable BusNotBusy interrupt */ xiic_irq_dis(i2c, XIIC_INTR_BNB_MASK); + if (i2c->tx_msg && i2c->smbus_block_read) { + i2c->smbus_block_read = false; + /* Set requested message len=1 to indicate STATE_DONE */ + i2c->tx_msg->len = 1; + } + if (!i2c->tx_msg) goto out; @@ -751,29 +757,6 @@ static irqreturn_t xiic_process(int irq, void *dev_id) xiic_irq_dis(i2c, XIIC_INTR_TX_HALF_MASK); } - if (pend & XIIC_INTR_BNB_MASK) { - /* IIC bus has transitioned to not busy */ - clr |= XIIC_INTR_BNB_MASK; - - /* The bus is not busy, disable BusNotBusy interrupt */ - xiic_irq_dis(i2c, XIIC_INTR_BNB_MASK); - - if (i2c->tx_msg && i2c->smbus_block_read) { - i2c->smbus_block_read = false; - /* Set requested message len=1 to indicate STATE_DONE */ - i2c->tx_msg->len = 1; - } - - if (!i2c->tx_msg) - goto out; - - if (i2c->nmsgs == 1 && !i2c->rx_msg && - xiic_tx_space(i2c) == 0) - xiic_wakeup(i2c, STATE_DONE); - else - xiic_wakeup(i2c, STATE_ERROR); - } - out: dev_dbg(i2c->adap.dev.parent, "%s clr: 0x%x\n", __func__, clr); -- 2.39.2
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#12896): https://lists.yoctoproject.org/g/linux-yocto/message/12896 Mute This Topic: https://lists.yoctoproject.org/mt/100385712/21656 Group Owner: linux-yocto+ow...@lists.yoctoproject.org Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-