Commit ebcd241a635c868b1f89abbfb4dd176ca5f81eba

Authored by Linus Torvalds

Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux

Pull i2c bugfixes from Wolfram Sang:
 "A few driver bugfixes for 3.18"

* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
  i2c: omap: fix i207 errata handling
  i2c: designware: prevent early stop on TX FIFO empty
  i2c: omap: fix NACK and Arbitration Lost irq handling

Showing 2 changed files Side-by-side Diff

drivers/i2c/busses/i2c-designware-core.c
... ... @@ -359,7 +359,7 @@
359 359 }
360 360  
361 361 /* Configure Tx/Rx FIFO threshold levels */
362   - dw_writel(dev, dev->tx_fifo_depth - 1, DW_IC_TX_TL);
  362 + dw_writel(dev, dev->tx_fifo_depth / 2, DW_IC_TX_TL);
363 363 dw_writel(dev, 0, DW_IC_RX_TL);
364 364  
365 365 /* configure the i2c master */
drivers/i2c/busses/i2c-omap.c
... ... @@ -922,14 +922,12 @@
922 922 if (stat & OMAP_I2C_STAT_NACK) {
923 923 err |= OMAP_I2C_STAT_NACK;
924 924 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_NACK);
925   - break;
926 925 }
927 926  
928 927 if (stat & OMAP_I2C_STAT_AL) {
929 928 dev_err(dev->dev, "Arbitration lost\n");
930 929 err |= OMAP_I2C_STAT_AL;
931 930 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_AL);
932   - break;
933 931 }
934 932  
935 933 /*
936 934  
937 935  
... ... @@ -954,11 +952,13 @@
954 952 if (dev->fifo_size)
955 953 num_bytes = dev->buf_len;
956 954  
957   - omap_i2c_receive_data(dev, num_bytes, true);
958   -
959   - if (dev->errata & I2C_OMAP_ERRATA_I207)
  955 + if (dev->errata & I2C_OMAP_ERRATA_I207) {
960 956 i2c_omap_errata_i207(dev, stat);
  957 + num_bytes = (omap_i2c_read_reg(dev,
  958 + OMAP_I2C_BUFSTAT_REG) >> 8) & 0x3F;
  959 + }
961 960  
  961 + omap_i2c_receive_data(dev, num_bytes, true);
962 962 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
963 963 continue;
964 964 }