summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2021-06-25 01:10:35 +0300
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2021-06-30 06:49:42 +0000
commit98b7f58bc5bf859f5201635e7112d99356218820 (patch)
treee8f11995ce764ad0ed68c54457ddeeff58297690
parentc6944a48583f6dc2d698df387fd648075491bf81 (diff)
i2c: imx: retry transfer on transient failure
Set the i2c_adapter retries field to a sensible value. This allows the i2c core to retry master_xfer()/master_xfer_atomic() when it returns -EAGAIN. Currently the i2c-imx driver returns -EAGAIN only on Tx arbitration failure (I2SR_IAL). Related-to: ELB-3883 Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
-rw-r--r--drivers/i2c/busses/i2c-imx.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 5393b6d500c6..d59edf96aa65 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -59,6 +59,7 @@
/* Default value */
#define IMX_I2C_BIT_RATE 100000 /* 100kHz */
#define IMX_I2C_MAX_E_BIT_RATE 384000 /* 384kHz from e7805 errata*/
+#define IMX_I2C_MAX_RETRIES 3 /* Retries on arbitration loss */
/*
* Enable DMA if transfer byte size is bigger than this threshold.
@@ -1592,6 +1593,7 @@ static int i2c_imx_probe(struct platform_device *pdev)
i2c_imx->adapter.dev.parent = &pdev->dev;
i2c_imx->adapter.nr = pdev->id;
i2c_imx->adapter.dev.of_node = pdev->dev.of_node;
+ i2c_imx->adapter.retries = IMX_I2C_MAX_RETRIES;
i2c_imx->base = base;
ACPI_COMPANION_SET(&i2c_imx->adapter.dev, ACPI_COMPANION(&pdev->dev));