aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/busses/i2c-rcar.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
index f3c7139dfa25..dc32f5fa75d0 100644
--- a/drivers/i2c/busses/i2c-rcar.c
+++ b/drivers/i2c/busses/i2c-rcar.c
@@ -367,18 +367,15 @@ static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
367 367
368 msr = rcar_i2c_read(priv, ICMSR); 368 msr = rcar_i2c_read(priv, ICMSR);
369 369
370 /* Only handle interrupts that are currently enabled */
371 msr &= rcar_i2c_read(priv, ICMIER);
372
370 /* Arbitration lost */ 373 /* Arbitration lost */
371 if (msr & MAL) { 374 if (msr & MAL) {
372 rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST)); 375 rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST));
373 goto out; 376 goto out;
374 } 377 }
375 378
376 /* Stop */
377 if (msr & MST) {
378 rcar_i2c_flags_set(priv, ID_DONE);
379 goto out;
380 }
381
382 /* Nack */ 379 /* Nack */
383 if (msr & MNR) { 380 if (msr & MNR) {
384 /* go to stop phase */ 381 /* go to stop phase */
@@ -388,6 +385,12 @@ static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
388 goto out; 385 goto out;
389 } 386 }
390 387
388 /* Stop */
389 if (msr & MST) {
390 rcar_i2c_flags_set(priv, ID_DONE);
391 goto out;
392 }
393
391 if (rcar_i2c_is_recv(priv)) 394 if (rcar_i2c_is_recv(priv))
392 rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr)); 395 rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr));
393 else 396 else