mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
i2c: exynos5: disable fifo-almost-empty irq signal when necessary
Fifo-almost-empty irq signal should be disabled as soon as possible, to avoid unnecessary interrupt storm. The best moment is when there is no more data to feed fifo. This patch fixes system stalls caused by IRQ storm. Signed-off-by: Andrzej Hajda <[email protected]> Tested-by: Marek Szyprowski <[email protected]> Tested-by: Andi Shyti <[email protected]> Reviewed-by: Andi Shyti <[email protected]> Signed-off-by: Wolfram Sang <[email protected]>
This commit is contained in:
parent
e3ccc921b7
commit
fd1c9c8568
1 changed files with 6 additions and 1 deletions
|
|
@ -502,8 +502,13 @@ static irqreturn_t exynos5_i2c_irq(int irqno, void *dev_id)
|
|||
fifo_level = HSI2C_TX_FIFO_LVL(fifo_status);
|
||||
|
||||
len = i2c->variant->fifo_depth - fifo_level;
|
||||
if (len > (i2c->msg->len - i2c->msg_ptr))
|
||||
if (len > (i2c->msg->len - i2c->msg_ptr)) {
|
||||
u32 int_en = readl(i2c->regs + HSI2C_INT_ENABLE);
|
||||
|
||||
int_en &= ~HSI2C_INT_TX_ALMOSTEMPTY_EN;
|
||||
writel(int_en, i2c->regs + HSI2C_INT_ENABLE);
|
||||
len = i2c->msg->len - i2c->msg_ptr;
|
||||
}
|
||||
|
||||
while (len > 0) {
|
||||
byte = i2c->msg->buf[i2c->msg_ptr++];
|
||||
|
|
|
|||
Loading…
Reference in a new issue