Pull i2c fixes from Wolfram Sang: "A set of driver fixes for the I2C subsystem" * 'i2c/for-current-fixed' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: i2c: s3c2410: Mark expected switch fall-through i2c: at91: fix clk_offset for sama5d2 i2c: at91: disable TXRDY interrupt after sending data i2c: iproc: Fix i2c master read more than 63 bytes eeprom: at24: make spd world-readable again
Unified · Split
| @@ -142,7 +142,7 @@ static struct at91_twi_pdata sama5d4_config = { · 141 unmodified lines | ||
| 142 | 142 | |
| 143 | 143 | static struct at91_twi_pdata sama5d2_config = { |
| 144 | 144 | .clk_max_div = 7, |
| 145 | − .clk_offset = 4, | |
| 145 | + .clk_offset = 3, | |
| 146 | 146 | .has_unre_flag = true, |
| 147 | 147 | .has_alt_cmd = true, |
| 148 | 148 | .has_hold_field = true, |
| @@ -122,9 +122,11 @@ static void at91_twi_write_next_byte(struct at91_twi_dev *dev) · 121 unmodified lines | ||
| 122 | 122 | writeb_relaxed(*dev->buf, dev->base + AT91_TWI_THR); |
| 123 | 123 | |
| 124 | 124 | /* send stop when last byte has been written */ |
| 125 | − if (--dev->buf_len == 0) | |
| 125 | + if (--dev->buf_len == 0) { | |
| 126 | 126 | if (!dev->use_alt_cmd) |
| 127 | 127 | at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP); |
| 128 | + at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_TXRDY); | |
| 129 | + } | |
| 128 | 130 | |
| 129 | 131 | dev_dbg(dev->dev, "wrote 0x%x, to go %zu\n", *dev->buf, dev->buf_len); |
| 130 | 132 | |
| @@ -542,9 +544,8 @@ static int at91_do_twi_transfer(struct at91_twi_dev *dev) · 411 unmodified lines | ||
| 542 | 544 | } else { |
| 543 | 545 | at91_twi_write_next_byte(dev); |
| 544 | 546 | at91_twi_write(dev, AT91_TWI_IER, |
| 545 | − AT91_TWI_TXCOMP | | |
| 546 | − AT91_TWI_NACK | | |
| 547 | − AT91_TWI_TXRDY); | |
| 547 | + AT91_TWI_TXCOMP | AT91_TWI_NACK | | |
| 548 | + (dev->buf_len ? AT91_TWI_TXRDY : 0)); | |
| 548 | 549 | } |
| 549 | 550 | } |
| 550 | 551 | |
| @@ -392,16 +392,18 @@ static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c, · 391 unmodified lines | ||
| 392 | 392 | static void bcm_iproc_i2c_read_valid_bytes(struct bcm_iproc_i2c_dev *iproc_i2c) |
| 393 | 393 | { |
| 394 | 394 | struct i2c_msg *msg = iproc_i2c->msg; |
| 395 | + uint32_t val; | |
| 395 | 396 | |
| 396 | 397 | /* Read valid data from RX FIFO */ |
| 397 | 398 | while (iproc_i2c->rx_bytes < msg->len) { |
| 398 | − if (!((iproc_i2c_rd_reg(iproc_i2c, M_FIFO_CTRL_OFFSET) >> M_FIFO_RX_CNT_SHIFT) | |
| 399 | − & M_FIFO_RX_CNT_MASK)) | |
| 399 | + val = iproc_i2c_rd_reg(iproc_i2c, M_RX_OFFSET); | |
| 400 | + | |
| 401 | + /* rx fifo empty */ | |
| 402 | + if (!((val >> M_RX_STATUS_SHIFT) & M_RX_STATUS_MASK)) | |
| 400 | 403 | break; |
| 401 | 404 | |
| 402 | 405 | msg->buf[iproc_i2c->rx_bytes] = |
| 403 | − (iproc_i2c_rd_reg(iproc_i2c, M_RX_OFFSET) >> | |
| 404 | − M_RX_DATA_SHIFT) & M_RX_DATA_MASK; | |
| 406 | + (val >> M_RX_DATA_SHIFT) & M_RX_DATA_MASK; | |
| 405 | 407 | iproc_i2c->rx_bytes++; |
| 406 | 408 | } |
| 407 | 409 | } |
| @@ -435,6 +435,7 @@ static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat) · 434 unmodified lines | ||
| 435 | 435 | * fall through to the write state, as we will need to |
| 436 | 436 | * send a byte as well |
| 437 | 437 | */ |
| 438 | + /* Fall through */ | |
| 438 | 439 | |
| 439 | 440 | case STATE_WRITE: |
| 440 | 441 | /* |
| @@ -685,7 +685,7 @@ static int at24_probe(struct i2c_client *client) · 684 unmodified lines | ||
| 685 | 685 | nvmem_config.name = dev_name(dev); |
| 686 | 686 | nvmem_config.dev = dev; |
| 687 | 687 | nvmem_config.read_only = !writable; |
| 688 | − nvmem_config.root_only = true; | |
| 688 | + nvmem_config.root_only = !(flags & AT24_FLAG_IRUGO); | |
| 689 | 689 | nvmem_config.owner = THIS_MODULE; |
| 690 | 690 | nvmem_config.compat = true; |
| 691 | 691 | nvmem_config.base_dev = dev; |