Skip to content

Commit fed1bd5

Browse files
Qii Wangwsakernel
authored andcommitted
i2c: mediatek: Disable i2c start_en and clear intr_stat brfore reset
The i2c controller driver do dma reset after transfer timeout, but sometimes dma reset will trigger an unexpected DMA_ERR irq. It will cause the i2c controller to continuously send interrupts to the system and cause soft lock-up. So we need to disable i2c start_en and clear intr_stat to stop i2c controller before dma reset when transfer timeout. Fixes: aafced6("i2c: mediatek: move dma reset before i2c reset") Signed-off-by: Qii Wang <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
1 parent e4d8716 commit fed1bd5

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

drivers/i2c/busses/i2c-mt65xx.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,11 @@ static void mtk_i2c_clock_disable(struct mtk_i2c *i2c)
479479
static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
480480
{
481481
u16 control_reg;
482+
u16 intr_stat_reg;
483+
484+
mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_START);
485+
intr_stat_reg = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
486+
mtk_i2c_writew(i2c, intr_stat_reg, OFFSET_INTR_STAT);
482487

483488
if (i2c->dev_comp->apdma_sync) {
484489
writel(I2C_DMA_WARM_RST, i2c->pdmabase + OFFSET_RST);

0 commit comments

Comments
 (0)