[PATCH v2 3/3] i2c: imx: Don't generate STOP condition if arbitration has been lost

Krzysztof Kozlowski krzk at kernel.org
Mon Oct 5 04:16:39 EDT 2020


On Fri, Oct 02, 2020 at 05:23:05PM +0200, Christian Eggers wrote:
> If arbitration is lost, the master automatically changes to slave mode.
> I2SR_IBB may or may not be reset by hardware. Raising a STOP condition
> by resetting I2CR_MSTA has no effect and will not clear I2SR_IBB.
> 
> So calling i2c_imx_bus_busy() is not required and would busy-wait until
> timeout.
> 
> Signed-off-by: Christian Eggers <ceggers at arri.de>
> Cc: stable at vger.kernel.org # Requires trivial backporting, simple remove
>                            # the 3rd argument from the calls to
>                            # i2c_imx_bus_busy().
> ---
>  drivers/i2c/busses/i2c-imx.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 

Tested (not extensively) on Vybrid VF500 (Toradex VF50):
Tested-by: Krzysztof Kozlowski <krzk at kernel.org>

The I2C on Vybrid VF500 still works fine (also bigger transfers). I did
not test this actual condition (arbitration) but only a regular I2C
driver (BQ27xxx fuel gauge). Obviously this only proves that regular
operation is not broken...

Best regards,
Krzysztof



More information about the linux-arm-kernel mailing list