aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/i2c/busses/i2c-omap.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index f33bc5a55074..5d4bad44d370 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -775,6 +775,17 @@ static int errata_omap3_i462(struct omap_i2c_dev *dev)
775 if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) { 775 if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
776 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_XRDY | 776 omap_i2c_ack_stat(dev, (OMAP_I2C_STAT_XRDY |
777 OMAP_I2C_STAT_XDR)); 777 OMAP_I2C_STAT_XDR));
778 if (stat & OMAP_I2C_STAT_NACK) {
779 dev->cmd_err |= OMAP_I2C_STAT_NACK;
780 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
781 }
782
783 if (stat & OMAP_I2C_STAT_AL) {
784 dev_err(dev->dev, "Arbitration lost\n");
785 dev->cmd_err |= OMAP_I2C_STAT_AL;
786 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
787 }
788
778 return -EIO; 789 return -EIO;
779 } 790 }
780 791
@@ -875,7 +886,6 @@ omap_i2c_isr(int this_irq, void *dev_id)
875 goto out; 886 goto out;
876 } 887 }
877 888
878complete:
879 if (stat & OMAP_I2C_STAT_NACK) { 889 if (stat & OMAP_I2C_STAT_NACK) {
880 err |= OMAP_I2C_STAT_NACK; 890 err |= OMAP_I2C_STAT_NACK;
881 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK); 891 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
@@ -938,7 +948,7 @@ complete:
938 ret = omap_i2c_transmit_data(dev, num_bytes, true); 948 ret = omap_i2c_transmit_data(dev, num_bytes, true);
939 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 949 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
940 if (ret < 0) 950 if (ret < 0)
941 goto complete; 951 goto out;
942 952
943 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR); 953 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XDR);
944 continue; 954 continue;
@@ -954,7 +964,7 @@ complete:
954 ret = omap_i2c_transmit_data(dev, num_bytes, false); 964 ret = omap_i2c_transmit_data(dev, num_bytes, false);
955 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG); 965 stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
956 if (ret < 0) 966 if (ret < 0)
957 goto complete; 967 goto out;
958 968
959 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY); 969 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
960 continue; 970 continue;