Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

can: mcp251x: Improve mcp251x_hw_probe()

This patch adds check for mcp251x_hw_reset() result on startup and
removes unnecessary checking for CANSTAT register since this value
is being checked in mcp251x_hw_reset().

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
Tested-by: Alexander Shiyan <shc_work@mail.ru>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>

authored by

Alexander Shiyan and committed by
Marc Kleine-Budde
ee967fff ff06d611

+16 -17
+16 -17
drivers/net/can/mcp251x.c
··· 649 649 650 650 static 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 - /* 657 - * Please note that these are "magic values" based on after 658 - * reset defaults taken from data sheet which allows us to see 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; 659 + ctrl = mcp251x_read_reg(spi, CANCTRL); 664 660 665 - dev_dbg(&spi->dev, "CANSTAT 0x%02x CANCTRL 0x%02x\n", st1, st2); 661 + dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl); 666 662 667 - /* Check for power up default values */ 668 - return (st1 == 0x80 && st2 == 0x07) ? 1 : 0; 663 + /* Check for power up default value */ 664 + if ((ctrl & 0x17) != 0x07) 665 + return -ENODEV; 666 + 667 + return 0; 669 668 } 670 669 671 670 static int mcp251x_power_enable(struct regulator *reg, int enable) ··· 1141 1142 SET_NETDEV_DEV(net, &spi->dev); 1142 1143 1143 1144 /* Here is OK to not lock the MCP, no one knows about it yet */ 1144 - if (!mcp251x_hw_probe(spi)) { 1145 - ret = -ENODEV; 1145 + ret = mcp251x_hw_probe(spi); 1146 + if (ret) 1146 1147 goto error_probe; 1147 - } 1148 + 1148 1149 mcp251x_hw_sleep(spi); 1149 1150 1150 1151 ret = register_candev(net); ··· 1153 1154 1154 1155 devm_can_led_init(net); 1155 1156 1156 - return ret; 1157 + return 0; 1157 1158 1158 1159 error_probe: 1159 1160 if (mcp251x_enable_dma)