spi: spidev: Enable control of inter-word delays
authorJan Kundrát <jan.kundrat@cesnet.cz>
Thu, 7 Mar 2019 14:29:42 +0000 (15:29 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 18 Mar 2019 12:18:28 +0000 (12:18 +0000)
Commit b7bb367afa4b added support for inserting delays in between
individual words within a single SPI transaction. This makes it
accessible from userspace.

WARNING: This delay is silently ignored unless the SPI controller
implements extra support for it. This is similar to how the in-kernel
users handle the other existing property, spi_transfer->word_delay.

Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spidev.c
include/uapi/linux/spi/spidev.h

index b0c76e2626ce2a46b1027514004990dcba94264c..70966e10be7e27b94aa5e90a7591fbf83c1d58ae 100644 (file)
@@ -276,17 +276,19 @@ static int spidev_message(struct spidev_data *spidev,
                k_tmp->bits_per_word = u_tmp->bits_per_word;
                k_tmp->delay_usecs = u_tmp->delay_usecs;
                k_tmp->speed_hz = u_tmp->speed_hz;
+               k_tmp->word_delay_usecs = u_tmp->word_delay_usecs;
                if (!k_tmp->speed_hz)
                        k_tmp->speed_hz = spidev->speed_hz;
 #ifdef VERBOSE
                dev_dbg(&spidev->spi->dev,
-                       "  xfer len %u %s%s%s%dbits %u usec %uHz\n",
+                       "  xfer len %u %s%s%s%dbits %u usec %u usec %uHz\n",
                        u_tmp->len,
                        u_tmp->rx_buf ? "rx " : "",
                        u_tmp->tx_buf ? "tx " : "",
                        u_tmp->cs_change ? "cs " : "",
                        u_tmp->bits_per_word ? : spidev->spi->bits_per_word,
                        u_tmp->delay_usecs,
+                       u_tmp->word_delay_usecs,
                        u_tmp->speed_hz ? : spidev->spi->max_speed_hz);
 #endif
                spi_message_add_tail(k_tmp, &msg);
index c4253f0090d8c45d7221194938c680180e0c3240..ee0f2460bff647e78f6e627bbbdc487bead384cf 100644 (file)
@@ -66,6 +66,9 @@
  * @delay_usecs: If nonzero, how long to delay after the last bit transfer
  *     before optionally deselecting the device before the next transfer.
  * @cs_change: True to deselect device before starting the next transfer.
+ * @word_delay_usecs: If nonzero, how long to wait between words within one
+ *     transfer. This property needs explicit support in the SPI controller,
+ *     otherwise it is silently ignored.
  *
  * This structure is mapped directly to the kernel spi_transfer structure;
  * the fields have the same meanings, except of course that the pointers
@@ -100,7 +103,8 @@ struct spi_ioc_transfer {
        __u8            cs_change;
        __u8            tx_nbits;
        __u8            rx_nbits;
-       __u16           pad;
+       __u8            word_delay_usecs;
+       __u8            pad;
 
        /* If the contents of 'struct spi_ioc_transfer' ever change
         * incompatibly, then the ioctl number (currently 0) must change;