can: mcp251x: Improve mcp251x_hw_probe()
authorAlexander Shiyan <shc_work@mail.ru>
Fri, 28 Mar 2014 10:14:46 +0000 (14:14 +0400)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 24 Apr 2014 20:54:15 +0000 (22:54 +0200)
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>
drivers/net/can/mcp251x.c

index 9a8fd9456979a2c973b4359ed5f9b32d6c2fe39d..bc235f9dc7543e0a382211dfe50ff6c00cae1b50 100644 (file)
@@ -649,23 +649,22 @@ static int mcp251x_hw_reset(struct spi_device *spi)
 
 static int mcp251x_hw_probe(struct spi_device *spi)
 {
-       int st1, st2;
+       u8 ctrl;
+       int ret;
 
-       mcp251x_hw_reset(spi);
+       ret = mcp251x_hw_reset(spi);
+       if (ret)
+               return ret;
 
-       /*
-        * Please note that these are "magic values" based on after
-        * reset defaults taken from data sheet which allows us to see
-        * if we really have a chip on the bus (we avoid common all
-        * zeroes or all ones situations)
-        */
-       st1 = mcp251x_read_reg(spi, CANSTAT) & 0xEE;
-       st2 = mcp251x_read_reg(spi, CANCTRL) & 0x17;
+       ctrl = mcp251x_read_reg(spi, CANCTRL);
+
+       dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl);
 
-       dev_dbg(&spi->dev, "CANSTAT 0x%02x CANCTRL 0x%02x\n", st1, st2);
+       /* Check for power up default value */
+       if ((ctrl & 0x17) != 0x07)
+               return -ENODEV;
 
-       /* Check for power up default values */
-       return (st1 == 0x80 && st2 == 0x07) ? 1 : 0;
+       return 0;
 }
 
 static int mcp251x_power_enable(struct regulator *reg, int enable)
@@ -1142,10 +1141,10 @@ static int mcp251x_can_probe(struct spi_device *spi)
        SET_NETDEV_DEV(net, &spi->dev);
 
        /* Here is OK to not lock the MCP, no one knows about it yet */
-       if (!mcp251x_hw_probe(spi)) {
-               ret = -ENODEV;
+       ret = mcp251x_hw_probe(spi);
+       if (ret)
                goto error_probe;
-       }
+
        mcp251x_hw_sleep(spi);
 
        ret = register_candev(net);
@@ -1154,7 +1153,7 @@ static int mcp251x_can_probe(struct spi_device *spi)
 
        devm_can_led_init(net);
 
-       return ret;
+       return 0;
 
 error_probe:
        if (mcp251x_enable_dma)