spi: spi-fsl-dspi: Move dspi_interrupt above dspi_transfer_one_message
authorVladimir Oltean <olteanv@gmail.com>
Sun, 18 Aug 2019 18:01:13 +0000 (21:01 +0300)
committerMark Brown <broonie@kernel.org>
Tue, 20 Aug 2019 13:13:30 +0000 (14:13 +0100)
The two functions are loosely coupled through dspi->waitq, but
logically, dspi_transfer_one_message depends on dspi_interrupt in order
to complete. Move its definition above it so the I/O functions are
grouped closer together.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://lore.kernel.org/r/20190818180115.31114-13-olteanv@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-dspi.c

index 6128c695d06f691dadb2cd5c8140e01638951b5d..790cb02fc1814b0ee665a7f73a90d6182e95850c 100644 (file)
@@ -647,6 +647,63 @@ static void dspi_eoq_read(struct fsl_dspi *dspi)
                dspi_push_rx(dspi, fifo_read(dspi));
 }
 
+static irqreturn_t dspi_interrupt(int irq, void *dev_id)
+{
+       struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id;
+       struct spi_message *msg = dspi->cur_msg;
+       enum dspi_trans_mode trans_mode;
+       u32 spi_sr, spi_tcr;
+       u16 spi_tcnt;
+
+       regmap_read(dspi->regmap, SPI_SR, &spi_sr);
+       regmap_write(dspi->regmap, SPI_SR, spi_sr);
+
+
+       if (spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF)) {
+               /* Get transfer counter (in number of SPI transfers). It was
+                * reset to 0 when transfer(s) were started.
+                */
+               regmap_read(dspi->regmap, SPI_TCR, &spi_tcr);
+               spi_tcnt = SPI_TCR_GET_TCNT(spi_tcr);
+               /* Update total number of bytes that were transferred */
+               msg->actual_length += spi_tcnt * dspi->bytes_per_word;
+
+               trans_mode = dspi->devtype_data->trans_mode;
+               switch (trans_mode) {
+               case DSPI_EOQ_MODE:
+                       dspi_eoq_read(dspi);
+                       break;
+               case DSPI_TCFQ_MODE:
+                       dspi_tcfq_read(dspi);
+                       break;
+               default:
+                       dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n",
+                               trans_mode);
+                               return IRQ_HANDLED;
+               }
+
+               if (!dspi->len) {
+                       dspi->waitflags = 1;
+                       wake_up_interruptible(&dspi->waitq);
+               } else {
+                       switch (trans_mode) {
+                       case DSPI_EOQ_MODE:
+                               dspi_eoq_write(dspi);
+                               break;
+                       case DSPI_TCFQ_MODE:
+                               dspi_tcfq_write(dspi);
+                               break;
+                       default:
+                               dev_err(&dspi->pdev->dev,
+                                       "unsupported trans_mode %u\n",
+                                       trans_mode);
+                       }
+               }
+       }
+
+       return IRQ_HANDLED;
+}
+
 static int dspi_transfer_one_message(struct spi_controller *ctlr,
                                     struct spi_message *message)
 {
@@ -825,63 +882,6 @@ static void dspi_cleanup(struct spi_device *spi)
        kfree(chip);
 }
 
-static irqreturn_t dspi_interrupt(int irq, void *dev_id)
-{
-       struct fsl_dspi *dspi = (struct fsl_dspi *)dev_id;
-       struct spi_message *msg = dspi->cur_msg;
-       enum dspi_trans_mode trans_mode;
-       u32 spi_sr, spi_tcr;
-       u16 spi_tcnt;
-
-       regmap_read(dspi->regmap, SPI_SR, &spi_sr);
-       regmap_write(dspi->regmap, SPI_SR, spi_sr);
-
-
-       if (spi_sr & (SPI_SR_EOQF | SPI_SR_TCFQF)) {
-               /* Get transfer counter (in number of SPI transfers). It was
-                * reset to 0 when transfer(s) were started.
-                */
-               regmap_read(dspi->regmap, SPI_TCR, &spi_tcr);
-               spi_tcnt = SPI_TCR_GET_TCNT(spi_tcr);
-               /* Update total number of bytes that were transferred */
-               msg->actual_length += spi_tcnt * dspi->bytes_per_word;
-
-               trans_mode = dspi->devtype_data->trans_mode;
-               switch (trans_mode) {
-               case DSPI_EOQ_MODE:
-                       dspi_eoq_read(dspi);
-                       break;
-               case DSPI_TCFQ_MODE:
-                       dspi_tcfq_read(dspi);
-                       break;
-               default:
-                       dev_err(&dspi->pdev->dev, "unsupported trans_mode %u\n",
-                               trans_mode);
-                               return IRQ_HANDLED;
-               }
-
-               if (!dspi->len) {
-                       dspi->waitflags = 1;
-                       wake_up_interruptible(&dspi->waitq);
-               } else {
-                       switch (trans_mode) {
-                       case DSPI_EOQ_MODE:
-                               dspi_eoq_write(dspi);
-                               break;
-                       case DSPI_TCFQ_MODE:
-                               dspi_tcfq_write(dspi);
-                               break;
-                       default:
-                               dev_err(&dspi->pdev->dev,
-                                       "unsupported trans_mode %u\n",
-                                       trans_mode);
-                       }
-               }
-       }
-
-       return IRQ_HANDLED;
-}
-
 static const struct of_device_id fsl_dspi_dt_ids[] = {
        { .compatible = "fsl,vf610-dspi", .data = &vf610_data, },
        { .compatible = "fsl,ls1021a-v1.0-dspi", .data = &ls1021a_v1_data, },