mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-23 16:53:58 -05:00
i2c: mpc: Restore reread of I2C status register
Prior to commit1538d82f46
("i2c: mpc: Interrupt driven transfer") the old interrupt handler would reread MPC_I2C_SR after checking the CSR_MIF bit. When the driver was re-written this was removed as it seemed unnecessary. However as it turns out this is necessary for i2c devices which do clock stretching otherwise we end up thinking the bus is still busy when processing the interrupt. Fixes:1538d82f46
("i2c: mpc: Interrupt driven transfer") Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz> Signed-off-by: Wolfram Sang <wsa@kernel.org>
This commit is contained in:
parent
87cf512796
commit
763778cd79
1 changed files with 2 additions and 0 deletions
|
@ -564,6 +564,8 @@ static irqreturn_t mpc_i2c_isr(int irq, void *dev_id)
|
|||
|
||||
status = readb(i2c->base + MPC_I2C_SR);
|
||||
if (status & CSR_MIF) {
|
||||
/* Read again to allow register to stabilise */
|
||||
status = readb(i2c->base + MPC_I2C_SR);
|
||||
writeb(0, i2c->base + MPC_I2C_SR);
|
||||
mpc_i2c_do_intr(i2c, status);
|
||||
return IRQ_HANDLED;
|
||||
|
|
Loading…
Add table
Reference in a new issue