mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
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>
This commit is contained in:
committed by
Heiko Schocher
parent
3c99166441
commit
a40fe217d1
@@ -12,6 +12,10 @@ property which allows the chip offset length to be selected.
|
||||
Optional properties:
|
||||
- u-boot,i2c-offset-len - length of chip offset in bytes. If omitted the
|
||||
default value of 1 is used.
|
||||
- u-boot,i2c-transaction-bytes - the length of single I2C transaction on
|
||||
the bus. Some devices require more than single byte transmission
|
||||
(e.g. mc34708 mfd). This information is necessary to correctly
|
||||
initialize (put into idle state) I2C bus after soft reset.
|
||||
- gpios = <sda ...>, <scl ...>;
|
||||
pinctrl-names = "default", "gpio";
|
||||
pinctrl-0 = <&i2c_xfer>;
|
||||
@@ -28,6 +32,7 @@ i2c4: i2c@12ca0000 {
|
||||
compatible = "google,cros-ec";
|
||||
i2c-max-frequency = <100000>;
|
||||
u-boot,i2c-offset-len = <0>;
|
||||
u-boot,i2c-transaction-bytes = <3>;
|
||||
ec-interrupt = <&gpx1 6 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
Reference in New Issue
Block a user