>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

Reply via email to