mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-15 17:34:43 +00:00
![]() The MVTWSI controller can act either as a master or slave device. When acting as a master, the FSM is driven by the CPU. As a slave, the FSM is driven by the bus directly. In what is (apparently) a safety mechanism, if the bus transitions our FSM in any improper way, the FSM goes to a "bus error" state (0x00). I could find no documented or experimental way to get the FSM out of this state, except for a controller reset. Since U-Boot only uses the MVTWSI controller as a bus master, this feature only gets in the way: we do not care what happened on the bus previously as long as the bus is ready for a new transaction. So, when trying to start a new transaction, check for this state and reset the controller if necessary. Note that this should not be confused with the "deblocking" technique (used by the `i2c reset` command), which involves pulsing SCL repeatedly if SDA is found to be held low, in an attempt to force the bus back to an idle state. This patch only resets the controller in case something else had previously upset it, and (in principle) results in no externally-observable change in behavior. Signed-off-by: Sam Edwards <CFSworks@gmail.com> Reviewed-by: Stefan Roese <sr@denx.de> Reviewed-by: Heiko Schocher <hs@denx.de> |
||
---|---|---|
.. | ||
muxes | ||
acpi_i2c.c | ||
acpi_i2c.h | ||
ast2600_i2c.c | ||
ast2600_i2c.h | ||
ast_i2c.c | ||
ast_i2c.h | ||
at91_i2c.c | ||
at91_i2c.h | ||
cros_ec_ldo.c | ||
cros_ec_tunnel.c | ||
davinci_i2c.c | ||
davinci_i2c.h | ||
designware_i2c.c | ||
designware_i2c.h | ||
designware_i2c_pci.c | ||
exynos_hs_i2c.c | ||
fsl_i2c.c | ||
i2c-cdns.c | ||
i2c-cortina.c | ||
i2c-cortina.h | ||
i2c-emul-uclass.c | ||
i2c-gpio.c | ||
i2c-microchip.c | ||
i2c-uclass.c | ||
i2c-uniphier-f.c | ||
i2c-uniphier.c | ||
i2c-versatile.c | ||
i2c_core.c | ||
ihs_i2c.c | ||
imx_lpi2c.c | ||
intel_i2c.c | ||
iproc_i2c.c | ||
iproc_i2c.h | ||
Kconfig | ||
lpc32xx_i2c.c | ||
Makefile | ||
meson_i2c.c | ||
mtk_i2c.c | ||
mv_i2c.c | ||
mv_i2c.h | ||
mvtwsi.c | ||
mxc_i2c.c | ||
npcm_i2c.c | ||
nx_i2c.c | ||
ocores_i2c.c | ||
octeon_i2c.c | ||
omap24xx_i2c.c | ||
omap24xx_i2c.h | ||
qup_i2c.c | ||
rcar_i2c.c | ||
rcar_iic.c | ||
rk_i2c.c | ||
s3c24x0_i2c.c | ||
s3c24x0_i2c.h | ||
sandbox_i2c.c | ||
sh_i2c.c | ||
soft_i2c.c | ||
stm32f7_i2c.c | ||
sun6i_p2wi.c | ||
sun8i_rsb.c | ||
synquacer_i2c.c | ||
tegra186_bpmp_i2c.c | ||
tegra_i2c.c | ||
xilinx_xiic.c |