diff options
| -rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index 96fd528e888a..4af123fab63c 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
| @@ -853,24 +853,21 @@ omap_i2c_isr(int this_irq, void *dev_id) | |||
| 853 | dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat); | 853 | dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat); |
| 854 | if (count++ == 100) { | 854 | if (count++ == 100) { |
| 855 | dev_warn(dev->dev, "Too much work in one IRQ\n"); | 855 | dev_warn(dev->dev, "Too much work in one IRQ\n"); |
| 856 | omap_i2c_complete_cmd(dev, err); | 856 | goto out; |
| 857 | return IRQ_HANDLED; | ||
| 858 | } | 857 | } |
| 859 | 858 | ||
| 860 | complete: | 859 | complete: |
| 861 | if (stat & OMAP_I2C_STAT_NACK) { | 860 | if (stat & OMAP_I2C_STAT_NACK) { |
| 862 | err |= OMAP_I2C_STAT_NACK; | 861 | err |= OMAP_I2C_STAT_NACK; |
| 863 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); | 862 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); |
| 864 | omap_i2c_complete_cmd(dev, err); | 863 | goto out; |
| 865 | return IRQ_HANDLED; | ||
| 866 | } | 864 | } |
| 867 | 865 | ||
| 868 | if (stat & OMAP_I2C_STAT_AL) { | 866 | if (stat & OMAP_I2C_STAT_AL) { |
| 869 | dev_err(dev->dev, "Arbitration lost\n"); | 867 | dev_err(dev->dev, "Arbitration lost\n"); |
| 870 | err |= OMAP_I2C_STAT_AL; | 868 | err |= OMAP_I2C_STAT_AL; |
| 871 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); | 869 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL); |
| 872 | omap_i2c_complete_cmd(dev, err); | 870 | goto out; |
| 873 | return IRQ_HANDLED; | ||
| 874 | } | 871 | } |
| 875 | 872 | ||
| 876 | /* | 873 | /* |
| @@ -883,8 +880,7 @@ complete: | |||
| 883 | OMAP_I2C_STAT_XRDY | | 880 | OMAP_I2C_STAT_XRDY | |
| 884 | OMAP_I2C_STAT_XDR | | 881 | OMAP_I2C_STAT_XDR | |
| 885 | OMAP_I2C_STAT_ARDY)); | 882 | OMAP_I2C_STAT_ARDY)); |
| 886 | omap_i2c_complete_cmd(dev, err); | 883 | goto out; |
| 887 | return IRQ_HANDLED; | ||
| 888 | } | 884 | } |
| 889 | 885 | ||
| 890 | if (stat & OMAP_I2C_STAT_RDR) { | 886 | if (stat & OMAP_I2C_STAT_RDR) { |
| @@ -949,19 +945,19 @@ complete: | |||
| 949 | dev_err(dev->dev, "Receive overrun\n"); | 945 | dev_err(dev->dev, "Receive overrun\n"); |
| 950 | err |= OMAP_I2C_STAT_ROVR; | 946 | err |= OMAP_I2C_STAT_ROVR; |
| 951 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR); | 947 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_ROVR); |
| 952 | omap_i2c_complete_cmd(dev, err); | 948 | goto out; |
| 953 | return IRQ_HANDLED; | ||
| 954 | } | 949 | } |
| 955 | 950 | ||
| 956 | if (stat & OMAP_I2C_STAT_XUDF) { | 951 | if (stat & OMAP_I2C_STAT_XUDF) { |
| 957 | dev_err(dev->dev, "Transmit underflow\n"); | 952 | dev_err(dev->dev, "Transmit underflow\n"); |
| 958 | err |= OMAP_I2C_STAT_XUDF; | 953 | err |= OMAP_I2C_STAT_XUDF; |
| 959 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF); | 954 | omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XUDF); |
| 960 | omap_i2c_complete_cmd(dev, err); | 955 | goto out; |
| 961 | return IRQ_HANDLED; | ||
| 962 | } | 956 | } |
| 963 | } while (stat); | 957 | } while (stat); |
| 964 | 958 | ||
| 959 | out: | ||
| 960 | omap_i2c_complete_cmd(dev, err); | ||
| 965 | return IRQ_HANDLED; | 961 | return IRQ_HANDLED; |
| 966 | } | 962 | } |
| 967 | 963 | ||
