|
|
@@ -1,47 +0,0 @@
|
|
|
-From 9f29c6c8865de6f2dc200cb4c59a447d0884a6b3 Mon Sep 17 00:00:00 2001
|
|
|
-From: Phil Elwell <[email protected]>
|
|
|
-Date: Thu, 1 Aug 2019 08:58:48 +0100
|
|
|
-Subject: [PATCH 726/806] can: mcp251x: Allow more time after a reset
|
|
|
-
|
|
|
-Some boards take longer than 5ms to power up after a reset, so allow
|
|
|
-a few retry attempts before giving up.
|
|
|
-
|
|
|
-See: https://github.com/raspberrypi/linux/issues/2767
|
|
|
-
|
|
|
-Signed-off-by: Phil Elwell <[email protected]>
|
|
|
----
|
|
|
- drivers/net/can/spi/mcp251x.c | 15 ++++++++++++---
|
|
|
- 1 file changed, 12 insertions(+), 3 deletions(-)
|
|
|
-
|
|
|
---- a/drivers/net/can/spi/mcp251x.c
|
|
|
-+++ b/drivers/net/can/spi/mcp251x.c
|
|
|
-@@ -628,6 +628,7 @@ static int mcp251x_hw_reset(struct spi_d
|
|
|
- struct mcp251x_priv *priv = spi_get_drvdata(spi);
|
|
|
- u8 reg;
|
|
|
- int ret;
|
|
|
-+ int retries = 10;
|
|
|
-
|
|
|
- /* Wait for oscillator startup timer after power up */
|
|
|
- mdelay(MCP251X_OST_DELAY_MS);
|
|
|
-@@ -637,10 +638,18 @@ static int mcp251x_hw_reset(struct spi_d
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
-- /* Wait for oscillator startup timer after reset */
|
|
|
-- mdelay(MCP251X_OST_DELAY_MS);
|
|
|
-+ /*
|
|
|
-+ * Wait for oscillator startup timer after reset
|
|
|
-+ *
|
|
|
-+ * Some devices can take longer than the expected 5ms to wake
|
|
|
-+ * up, so allow a few retries.
|
|
|
-+ */
|
|
|
-+
|
|
|
-+ do {
|
|
|
-+ mdelay(MCP251X_OST_DELAY_MS);
|
|
|
-+ reg = mcp251x_read_reg(spi, CANSTAT);
|
|
|
-+ } while (!reg && retries--);
|
|
|
-
|
|
|
-- reg = mcp251x_read_reg(spi, CANSTAT);
|
|
|
- if ((reg & CANCTRL_REQOP_MASK) != CANCTRL_REQOP_CONF)
|
|
|
- return -ENODEV;
|
|
|
-
|