aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/busses/i2c-mpc.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
index aedbbe6618db..3163eab3f608 100644
--- a/drivers/i2c/busses/i2c-mpc.c
+++ b/drivers/i2c/busses/i2c-mpc.c
@@ -70,7 +70,7 @@ static irqreturn_t mpc_i2c_isr(int irq, void *dev_id)
70 /* Read again to allow register to stabilise */ 70 /* Read again to allow register to stabilise */
71 i2c->interrupt = readb(i2c->base + MPC_I2C_SR); 71 i2c->interrupt = readb(i2c->base + MPC_I2C_SR);
72 writeb(0, i2c->base + MPC_I2C_SR); 72 writeb(0, i2c->base + MPC_I2C_SR);
73 wake_up_interruptible(&i2c->queue); 73 wake_up(&i2c->queue);
74 } 74 }
75 return IRQ_HANDLED; 75 return IRQ_HANDLED;
76} 76}
@@ -115,13 +115,10 @@ static int i2c_wait(struct mpc_i2c *i2c, unsigned timeout, int writing)
115 writeb(0, i2c->base + MPC_I2C_SR); 115 writeb(0, i2c->base + MPC_I2C_SR);
116 } else { 116 } else {
117 /* Interrupt mode */ 117 /* Interrupt mode */
118 result = wait_event_interruptible_timeout(i2c->queue, 118 result = wait_event_timeout(i2c->queue,
119 (i2c->interrupt & CSR_MIF), timeout * HZ); 119 (i2c->interrupt & CSR_MIF), timeout * HZ);
120 120
121 if (unlikely(result < 0)) { 121 if (unlikely(!(i2c->interrupt & CSR_MIF))) {
122 pr_debug("I2C: wait interrupted\n");
123 writeccr(i2c, 0);
124 } else if (unlikely(!(i2c->interrupt & CSR_MIF))) {
125 pr_debug("I2C: wait timeout\n"); 122 pr_debug("I2C: wait timeout\n");
126 writeccr(i2c, 0); 123 writeccr(i2c, 0);
127 result = -ETIMEDOUT; 124 result = -ETIMEDOUT;