mrf24j40: calling ieee802154_register_hw at last
authorAlexander Aring <alex.aring@gmail.com>
Mon, 21 Sep 2015 09:24:24 +0000 (11:24 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 22 Sep 2015 09:51:21 +0000 (11:51 +0200)
The function ieee802154_register_hw should always called at last.
Currently we do hardware init and such things after register hardware
into the subsystem. It could be that the subsystem already call driver
operations while running hardware init.

Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com>
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/net/ieee802154/mrf24j40.c

index 1023cd2b4095a3bd5af277d790699350b806dce4..de63cba88fa0fdbe72a162bd914d02faaf540996 100644 (file)
@@ -753,14 +753,9 @@ static int mrf24j40_probe(struct spi_device *spi)
        mutex_init(&devrec->buffer_mutex);
        init_completion(&devrec->tx_complete);
 
-       dev_dbg(printdev(devrec), "registered mrf24j40\n");
-       ret = ieee802154_register_hw(devrec->hw);
-       if (ret)
-               goto err_register_device;
-
        ret = mrf24j40_hw_init(devrec);
        if (ret)
-               goto err_hw_init;
+               goto err_register_device;
 
        ret = devm_request_threaded_irq(&spi->dev,
                                        spi->irq,
@@ -772,14 +767,16 @@ static int mrf24j40_probe(struct spi_device *spi)
 
        if (ret) {
                dev_err(printdev(devrec), "Unable to get IRQ");
-               goto err_irq;
+               goto err_register_device;
        }
 
+       dev_dbg(printdev(devrec), "registered mrf24j40\n");
+       ret = ieee802154_register_hw(devrec->hw);
+       if (ret)
+               goto err_register_device;
+
        return 0;
 
-err_irq:
-err_hw_init:
-       ieee802154_unregister_hw(devrec->hw);
 err_register_device:
        ieee802154_free_hw(devrec->hw);
 err_ret: