/*----------------------------------------------------------------------*/
 
+int spi_bitbang_init(struct spi_bitbang *bitbang)
+{
+       struct spi_master *master = bitbang->master;
+
+       if (!master || !bitbang->chipselect)
+               return -EINVAL;
+
+       mutex_init(&bitbang->lock);
+
+       if (!master->mode_bits)
+               master->mode_bits = SPI_CPOL | SPI_CPHA | bitbang->flags;
+
+       if (master->transfer || master->transfer_one_message)
+               return -EINVAL;
+
+       master->prepare_transfer_hardware = spi_bitbang_prepare_hardware;
+       master->unprepare_transfer_hardware = spi_bitbang_unprepare_hardware;
+       master->transfer_one = spi_bitbang_transfer_one;
+       master->set_cs = spi_bitbang_set_cs;
+
+       if (!bitbang->txrx_bufs) {
+               bitbang->use_dma = 0;
+               bitbang->txrx_bufs = spi_bitbang_bufs;
+               if (!master->setup) {
+                       if (!bitbang->setup_transfer)
+                               bitbang->setup_transfer =
+                                        spi_bitbang_setup_transfer;
+                       master->setup = spi_bitbang_setup;
+                       master->cleanup = spi_bitbang_cleanup;
+               }
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(spi_bitbang_init);
+
 /**
  * spi_bitbang_start - start up a polled/bitbanging SPI master driver
  * @bitbang: driver handle
        struct spi_master *master = bitbang->master;
        int ret;
 
-       if (!master || !bitbang->chipselect)
-               return -EINVAL;
-
-       mutex_init(&bitbang->lock);
-
-       if (!master->mode_bits)
-               master->mode_bits = SPI_CPOL | SPI_CPHA | bitbang->flags;
-
-       if (master->transfer || master->transfer_one_message)
-               return -EINVAL;
-
-       master->prepare_transfer_hardware = spi_bitbang_prepare_hardware;
-       master->unprepare_transfer_hardware = spi_bitbang_unprepare_hardware;
-       master->transfer_one = spi_bitbang_transfer_one;
-       master->set_cs = spi_bitbang_set_cs;
-
-       if (!bitbang->txrx_bufs) {
-               bitbang->use_dma = 0;
-               bitbang->txrx_bufs = spi_bitbang_bufs;
-               if (!master->setup) {
-                       if (!bitbang->setup_transfer)
-                               bitbang->setup_transfer =
-                                        spi_bitbang_setup_transfer;
-                       master->setup = spi_bitbang_setup;
-                       master->cleanup = spi_bitbang_cleanup;
-               }
-       }
+       ret = spi_bitbang_init(bitbang);
+       if (ret)
+               return ret;
 
        /* driver may get busy before register() returns, especially
         * if someone registered boardinfo for devices