DM: I2C: Introduce 'u-boot, i2c-transaction-bytes' property
authorLukasz Majewski <lukma@denx.de>
Thu, 4 Apr 2019 10:35:34 +0000 (12:35 +0200)
committerHeiko Schocher <hs@denx.de>
Thu, 11 Apr 2019 13:21:33 +0000 (15:21 +0200)
commita40fe217d19fdb9804fdc88342ce4bb0a0440c84
tree07fc2927d51569ad0614579c3e22f947e3eb8851
parent3c99166441bf3ea325af2da83cfe65430b49c066
DM: I2C: Introduce 'u-boot, i2c-transaction-bytes' property

The 'u-boot,i2c-transaction-bytes' device tree property provides
information regarding number of bytes transferred by a device in a
single transaction.

This change is necessary to avoid hanging devices after soft reset.
One notable example is communication with MC34708 device:

1. Reset when communicating with MC34708 via I2C.

2. The u-boot (after reboot -f) tries to setup the I2C and then calls
force_idle_bus. In the same time MC34708 still has some data to be sent
(as it transfers data in 24 bits chunks).

3. The force_idle_bus() is not able to make the bus idle as 8 SCL
clocks may be not enough to have the full transmission.

4. We end up with I2C inconsistency with MC34708.

This PMIC device requires 24+ SCL cycles to make finish any pending I2C
transmission.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
doc/device-tree-bindings/i2c/i2c.txt
drivers/i2c/i2c-uclass.c
drivers/i2c/mxc_i2c.c
include/i2c.h