i2c: npcm: Correct slave role behavior
[ Upstream commit d7aa1b149b8fc04d802879cf4662010aa4a42deb ]
Correct the slave transaction logic to be compatible with the generic
slave backend driver.
Fixes: 56a1485b10
("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
385f6ef4de
commit
e28aa4f467
@ -912,11 +912,15 @@ static int npcm_i2c_slave_get_wr_buf(struct npcm_i2c *bus)
|
||||
for (i = 0; i < I2C_HW_FIFO_SIZE; i++) {
|
||||
if (bus->slv_wr_size >= I2C_HW_FIFO_SIZE)
|
||||
break;
|
||||
i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value);
|
||||
if (bus->state == I2C_SLAVE_MATCH) {
|
||||
i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value);
|
||||
bus->state = I2C_OPER_STARTED;
|
||||
} else {
|
||||
i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value);
|
||||
}
|
||||
ind = (bus->slv_wr_ind + bus->slv_wr_size) % I2C_HW_FIFO_SIZE;
|
||||
bus->slv_wr_buf[ind] = value;
|
||||
bus->slv_wr_size++;
|
||||
i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value);
|
||||
}
|
||||
return I2C_HW_FIFO_SIZE - ret;
|
||||
}
|
||||
@ -964,7 +968,6 @@ static void npcm_i2c_slave_xmit(struct npcm_i2c *bus, u16 nwrite,
|
||||
if (nwrite == 0)
|
||||
return;
|
||||
|
||||
bus->state = I2C_OPER_STARTED;
|
||||
bus->operation = I2C_WRITE_OPER;
|
||||
|
||||
/* get the next buffer */
|
||||
|
Loading…
Reference in New Issue
Block a user