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; |
