indio_dev->modes = INDIO_DIRECT_MODE;
 
        sca3000_configure_ring(indio_dev);
-       ret = iio_device_register(indio_dev);
-       if (ret < 0)
-               return ret;
 
        if (spi->irq) {
                ret = request_threaded_irq(spi->irq,
                                           "sca3000",
                                           indio_dev);
                if (ret)
-                       goto error_unregister_dev;
+                       return ret;
        }
        indio_dev->setup_ops = &sca3000_ring_setup_ops;
        ret = sca3000_clean_setup(st);
        if (ret)
                goto error_free_irq;
 
-       return 0;
+       return iio_device_register(indio_dev);
 
 error_free_irq:
        if (spi->irq)
                free_irq(spi->irq, indio_dev);
-error_unregister_dev:
-       iio_device_unregister(indio_dev);
+
        return ret;
 }
 
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
        struct sca3000_state *st = iio_priv(indio_dev);
 
+       iio_device_unregister(indio_dev);
+
        /* Must ensure no interrupts can be generated after this! */
        sca3000_stop_all_interrupts(st);
        if (spi->irq)
                free_irq(spi->irq, indio_dev);
-       iio_device_unregister(indio_dev);
+
        sca3000_unconfigure_ring(indio_dev);
 
        return 0;