>Interrupt masking is done already after each transaction. At end of transfer, the code uses __i2c_dw_enable(dev, false) to disable adapter. This function doesn't mask interrupts. There is another function i2c_dw_disable that masks and clears interrupts. This could be used, but that means we need to fix in 2 places:
1. add interrupt masking to i2c_dw_init(); 2. change call __i2c_dw_enable(dev, false) to i2c_dw_disable; I think simply masking interrupt in i2c_dw_xfer_init is cleaner and safer. >The problem here is that after reset, the interrupt mask register gets 0x8ff >value (HW default), which means that most of the interrupts are left unmasked. >That is the reason why this only happens right after we resume from system >sleep. Masking interrupts on that path fixes the problem. The time out also happened in case of going into suspend and during normal operations. But at much less occurrence at 1-2 per 1000 cycles. -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html