aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/can/mcp251x.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c
index 9a8fd9456979..bc235f9dc754 100644
--- a/drivers/net/can/mcp251x.c
+++ b/drivers/net/can/mcp251x.c
@@ -649,23 +649,22 @@ static int mcp251x_hw_reset(struct spi_device *spi)
649 649
650static int mcp251x_hw_probe(struct spi_device *spi) 650static int mcp251x_hw_probe(struct spi_device *spi)
651{ 651{
652 int st1, st2; 652 u8 ctrl;
653 int ret;
653 654
654 mcp251x_hw_reset(spi); 655 ret = mcp251x_hw_reset(spi);
656 if (ret)
657 return ret;
655 658
656 /* 659 ctrl = mcp251x_read_reg(spi, CANCTRL);
657 * Please note that these are "magic values" based on after 660
658 * reset defaults taken from data sheet which allows us to see 661 dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl);
659 * if we really have a chip on the bus (we avoid common all
660 * zeroes or all ones situations)
661 */
662 st1 = mcp251x_read_reg(spi, CANSTAT) & 0xEE;
663 st2 = mcp251x_read_reg(spi, CANCTRL) & 0x17;
664 662
665 dev_dbg(&spi->dev, "CANSTAT 0x%02x CANCTRL 0x%02x\n", st1, st2); 663 /* Check for power up default value */
664 if ((ctrl & 0x17) != 0x07)
665 return -ENODEV;
666 666
667 /* Check for power up default values */ 667 return 0;
668 return (st1 == 0x80 && st2 == 0x07) ? 1 : 0;
669} 668}
670 669
671static int mcp251x_power_enable(struct regulator *reg, int enable) 670static int mcp251x_power_enable(struct regulator *reg, int enable)
@@ -1142,10 +1141,10 @@ static int mcp251x_can_probe(struct spi_device *spi)
1142 SET_NETDEV_DEV(net, &spi->dev); 1141 SET_NETDEV_DEV(net, &spi->dev);
1143 1142
1144 /* Here is OK to not lock the MCP, no one knows about it yet */ 1143 /* Here is OK to not lock the MCP, no one knows about it yet */
1145 if (!mcp251x_hw_probe(spi)) { 1144 ret = mcp251x_hw_probe(spi);
1146 ret = -ENODEV; 1145 if (ret)
1147 goto error_probe; 1146 goto error_probe;
1148 } 1147
1149 mcp251x_hw_sleep(spi); 1148 mcp251x_hw_sleep(spi);
1150 1149
1151 ret = register_candev(net); 1150 ret = register_candev(net);
@@ -1154,7 +1153,7 @@ static int mcp251x_can_probe(struct spi_device *spi)
1154 1153
1155 devm_can_led_init(net); 1154 devm_can_led_init(net);
1156 1155
1157 return ret; 1156 return 0;
1158 1157
1159error_probe: 1158error_probe:
1160 if (mcp251x_enable_dma) 1159 if (mcp251x_enable_dma)