Merge branch 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi_bitbang.c
index 8b55724d5f390152b7005d15b667f4f18f8ac788..14a63f6010d1bfda52ea7b125c8571fab457615b 100644 (file)
@@ -259,10 +259,6 @@ static void bitbang_work(struct work_struct *work)
        struct spi_bitbang      *bitbang =
                container_of(work, struct spi_bitbang, work);
        unsigned long           flags;
-       int                     (*setup_transfer)(struct spi_device *,
-                                       struct spi_transfer *);
-
-       setup_transfer = bitbang->setup_transfer;
 
        spin_lock_irqsave(&bitbang->lock, flags);
        bitbang->busy = 1;
@@ -300,11 +296,7 @@ static void bitbang_work(struct work_struct *work)
 
                        /* init (-1) or override (1) transfer params */
                        if (do_setup != 0) {
-                               if (!setup_transfer) {
-                                       status = -ENOPROTOOPT;
-                                       break;
-                               }
-                               status = setup_transfer(spi, t);
+                               status = bitbang->setup_transfer(spi, t);
                                if (status < 0)
                                        break;
                                if (do_setup == -1)
@@ -465,6 +457,9 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
                }
        } else if (!bitbang->master->setup)
                return -EINVAL;
+       if (bitbang->master->transfer == spi_bitbang_transfer &&
+                       !bitbang->setup_transfer)
+               return -EINVAL;
 
        /* this task is the only thing to touch the SPI bits */
        bitbang->busy = 0;