diff options
-rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 16 |
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 | ||
878 | complete: | ||
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; |