diff options
Diffstat (limited to 'drivers/i2c/busses/i2c-mpc.c')
-rw-r--r-- | drivers/i2c/busses/i2c-mpc.c | 9 |
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; |