i2c: pxa: clear all master action bits in i2c_pxa_stop_message()
[ Upstream commit e81c979f4e071d516aa27cf5a0c3939da00dc1ca ] If we timeout during a message transfer, the control register may contain bits that cause an action to be set. Read-modify-writing the register leaving these bits set may trigger the hardware to attempt one of these actions unintentionally. Always clear these bits when cleaning up after a message or after a timeout. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Wolfram Sang <wsa@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
9ecdbfee2d
commit
3018d81cd9
1 changed files with 2 additions and 4 deletions
|
@ -709,11 +709,9 @@ static inline void i2c_pxa_stop_message(struct pxa_i2c *i2c)
|
||||||
{
|
{
|
||||||
u32 icr;
|
u32 icr;
|
||||||
|
|
||||||
/*
|
/* Clear the START, STOP, ACK, TB and MA flags */
|
||||||
* Clear the STOP and ACK flags
|
|
||||||
*/
|
|
||||||
icr = readl(_ICR(i2c));
|
icr = readl(_ICR(i2c));
|
||||||
icr &= ~(ICR_STOP | ICR_ACKNAK);
|
icr &= ~(ICR_START | ICR_STOP | ICR_ACKNAK | ICR_TB | ICR_MA);
|
||||||
writel(icr, _ICR(i2c));
|
writel(icr, _ICR(i2c));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue