Merge remote-tracking branches 'spi/topic/xilinx' and 'spi/topic/xtfpga' into spi...
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-xilinx.c
index e6cd1112ae40d9afc072141840f936f4ee226fc3..a3b0b9944bf000c7b69afd868a1c8eed71308489 100644 (file)
@@ -87,10 +87,10 @@ struct xilinx_spi {
        const u8 *tx_ptr;       /* pointer in the Rx buffer */
        int remaining_bytes;    /* the number of bytes left to transfer */
        u8 bits_per_word;
-       unsigned int (*read_fn) (void __iomem *);
-       void (*write_fn) (u32, void __iomem *);
-       void (*tx_fn) (struct xilinx_spi *);
-       void (*rx_fn) (struct xilinx_spi *);
+       unsigned int (*read_fn)(void __iomem *);
+       void (*write_fn)(u32, void __iomem *);
+       void (*tx_fn)(struct xilinx_spi *);
+       void (*rx_fn)(struct xilinx_spi *);
 };
 
 static void xspi_write32(u32 val, void __iomem *addr)
@@ -208,26 +208,11 @@ static void xilinx_spi_chipselect(struct spi_device *spi, int is_on)
 }
 
 /* spi_bitbang requires custom setup_transfer() to be defined if there is a
- * custom txrx_bufs(). We have nothing to setup here as the SPI IP block
- * supports 8 or 16 bits per word which cannot be changed in software.
- * SPI clock can't be changed in software either.
- * Check for correct bits per word. Chip select delay calculations could be
- * added here as soon as bitbang_work() can be made aware of the delay value.
+ * custom txrx_bufs().
  */
 static int xilinx_spi_setup_transfer(struct spi_device *spi,
                struct spi_transfer *t)
 {
-       struct xilinx_spi *xspi = spi_master_get_devdata(spi->master);
-       u8 bits_per_word;
-
-       bits_per_word = (t && t->bits_per_word)
-                        ? t->bits_per_word : spi->bits_per_word;
-       if (bits_per_word != xspi->bits_per_word) {
-               dev_err(&spi->dev, "%s, unsupported bits_per_word=%d\n",
-                       __func__, bits_per_word);
-               return -EINVAL;
-       }
-
        return 0;
 }
 
@@ -406,6 +391,7 @@ static int xilinx_spi_probe(struct platform_device *pdev)
                xspi->write_fn = xspi_write32_be;
        }
 
+       master->bits_per_word_mask = SPI_BPW_MASK(bits_per_word);
        xspi->bits_per_word = bits_per_word;
        if (xspi->bits_per_word == 8) {
                xspi->tx_fn = xspi_tx8;