]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch
ethtool: Update to 3.16
[ipfire-2.x.git] / src / patches / kernel / wandboard / imx / 0001-i2c-imx-retry-on-NAK.patch
CommitLineData
0520e6a5
SS
1From: Tim Harvey <tharvey@gateworks.com>
2Subject: [PATCH] i2c: imx: retry on NAK
3
4In case of busy i2c try again to get ACK.
5
6Signed-off-by: Tim Harvey <tharvey@gateworks.com>
7Tested-by: Luka Perkov <luka@openwrt.org>
8---
9 drivers/i2c/busses/i2c-imx.c | 4 +++-
10 1 file changed, 3 insertions(+), 1 deletion(-)
11
12--- a/drivers/i2c/busses/i2c-imx.c
13+++ b/drivers/i2c/busses/i2c-imx.c
14@@ -62,6 +62,7 @@
15
16 /* Default value */
17 #define IMX_I2C_BIT_RATE 100000 /* 100kHz */
18+#define IMX_I2C_MAX_RETRIES 3 /* number of retries to attempt */
19
20 /* IMX I2C registers */
21 #define IMX_I2C_IADR 0x00 /* i2c slave address */
22@@ -198,7 +199,7 @@ static int i2c_imx_acked(struct imx_i2c_
23 {
24 if (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_RXAK) {
25 dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__);
26- return -EIO; /* No ACK */
27+ return -EAGAIN; /* try again */
28 }
29
30 dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__);
31@@ -533,6 +534,7 @@ static int __init i2c_imx_probe(struct p
32 i2c_imx->adapter.dev.parent = &pdev->dev;
33 i2c_imx->adapter.nr = pdev->id;
34 i2c_imx->adapter.dev.of_node = pdev->dev.of_node;
35+ i2c_imx->adapter.retries = IMX_I2C_MAX_RETRIES;
36 i2c_imx->base = base;
37
38 pinctrl = devm_pinctrl_get_select_default(&pdev->dev);