kernel_samsung_a53x/drivers/i2c
Robert Hancock b66ee2f40f i2c: xiic: Wait for TX empty to avoid missed TX NAKs
commit 521da1e9225450bd323db5fa5bca942b1dc485b7 upstream.

Frequently an I2C write will be followed by a read, such as a register
address write followed by a read of the register value. In this driver,
when the TX FIFO half empty interrupt was raised and it was determined
that there was enough space in the TX FIFO to send the following read
command, it would do so without waiting for the TX FIFO to actually
empty.

Unfortunately it appears that in some cases this can result in a NAK
that was raised by the target device on the write, such as due to an
unsupported register address, being ignored and the subsequent read
being done anyway. This can potentially put the I2C bus into an
invalid state and/or result in invalid read data being processed.

To avoid this, once a message has been fully written to the TX FIFO,
wait for the TX FIFO empty interrupt before moving on to the next
message, to ensure NAKs are handled properly.

Fixes: e1d5b6598cdc ("i2c: Add support for Xilinx XPS IIC Bus Interface")
Signed-off-by: Robert Hancock <robert.hancock@calian.com>
Cc: <stable@vger.kernel.org> # v2.6.34+
Reviewed-by: Manikanta Guntupalli <manikanta.guntupalli@amd.com>
Acked-by: Michal Simek <michal.simek@amd.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-23 23:21:42 +01:00
..
algos Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
busses i2c: xiic: Wait for TX empty to avoid missed TX NAKs 2024-11-23 23:21:42 +01:00
muxes i2c: muxes: i2c-demux-pinctrl: Use of_get_i2c_adapter_by_node() 2024-11-18 10:58:31 +01:00
i2c-boardinfo.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-core-acpi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-core-base.c i2c: Add i2c_get_match_data() 2024-11-23 23:21:20 +01:00
i2c-core-of.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-core-slave.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-core-smbus.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-core.h i2c: core: Fix atomic xfer check for non-preempt config 2024-11-18 12:12:08 +01:00
i2c-dev.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-mux.c i2c: mux: Avoid potential false error message in i2c_mux_add_adapter 2024-11-08 11:26:15 +01:00
i2c-slave-eeprom.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-slave-testunit.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i2c-smbus.c i2c: smbus: Send alert notifications to all devices if source not found 2024-11-23 23:20:26 +01:00
i2c-stub.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00