Skip to content

Commit

Permalink
i2c: omap: sanitize exit path
Browse files Browse the repository at this point in the history
move the goto out label one line down, so that
it can be used when stat is read as zero. All
other exits, can be done with a break statement.

While at that, also break out as soon as we
complete draining IRQ, since at that time
we know we transferred everything there was
to be transferred.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
  • Loading branch information
Felipe Balbi authored and Wolfram Sang committed Sep 12, 2012
1 parent 6d8451d commit 0bdfe0c
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions drivers/i2c/busses/i2c-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -901,27 +901,26 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)

if (!stat) {
/* my work here is done */
spin_unlock_irqrestore(&dev->lock, flags);
return IRQ_HANDLED;
goto out;
}

dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat);
if (count++ == 100) {
dev_warn(dev->dev, "Too much work in one IRQ\n");
goto out;
break;
}

if (stat & OMAP_I2C_STAT_NACK) {
err |= OMAP_I2C_STAT_NACK;
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
goto out;
break;
}

if (stat & OMAP_I2C_STAT_AL) {
dev_err(dev->dev, "Arbitration lost\n");
err |= OMAP_I2C_STAT_AL;
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
goto out;
break;
}

/*
Expand All @@ -934,7 +933,7 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
OMAP_I2C_STAT_XRDY |
OMAP_I2C_STAT_XDR |
OMAP_I2C_STAT_ARDY));
goto out;
break;
}

if (stat & OMAP_I2C_STAT_RDR) {
Expand All @@ -949,7 +948,7 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
i2c_omap_errata_i207(dev, stat);

omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
continue;
break;
}

if (stat & OMAP_I2C_STAT_RRDY) {
Expand All @@ -972,10 +971,10 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)

ret = omap_i2c_transmit_data(dev, num_bytes, true);
if (ret < 0)
goto out;
break;

omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR);
continue;
break;
}

if (stat & OMAP_I2C_STAT_XRDY) {
Expand All @@ -987,7 +986,7 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)

ret = omap_i2c_transmit_data(dev, num_bytes, false);
if (ret < 0)
goto out;
break;

omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
continue;
Expand All @@ -997,19 +996,20 @@ omap_i2c_isr_thread(int this_irq, void *dev_id)
dev_err(dev->dev, "Receive overrun\n");
err |= OMAP_I2C_STAT_ROVR;
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR);
goto out;
break;
}

if (stat & OMAP_I2C_STAT_XUDF) {
dev_err(dev->dev, "Transmit underflow\n");
err |= OMAP_I2C_STAT_XUDF;
omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF);
goto out;
break;
}
} while (stat);

out:
omap_i2c_complete_cmd(dev, err);

out:
spin_unlock_irqrestore(&dev->lock, flags);

return IRQ_HANDLED;
Expand Down

0 comments on commit 0bdfe0c

Please sign in to comment.