spi: coldfire-qspi: Use core message handling
authorAxel Lin <axel.lin@ingics.com>
Fri, 14 Feb 2014 01:55:55 +0000 (09:55 +0800)
committerMark Brown <broonie@linaro.org>
Wed, 5 Mar 2014 03:54:10 +0000 (11:54 +0800)
Convert to use default implementation of transfer_one_message().

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/spi/spi-coldfire-qspi.c

index e352942..8d594c6 100644 (file)
@@ -298,58 +298,44 @@ static void mcfqspi_transfer_msg16(struct mcfqspi *mcfqspi, unsigned count,
        }
 }
 
-static int mcfqspi_transfer_one_message(struct spi_master *master,
-                                        struct spi_message *msg)
+static void mcfqspi_set_cs(struct spi_device *spi, bool enable)
 {
-       struct mcfqspi *mcfqspi = spi_master_get_devdata(master);
-       struct spi_device *spi = msg->spi;
-       struct spi_transfer *t;
-       int status = 0;
-
-       list_for_each_entry(t, &msg->transfers, transfer_list) {
-               bool cs_high = spi->mode & SPI_CS_HIGH;
-               u16 qmr = MCFQSPI_QMR_MSTR;
-
-               qmr |= t->bits_per_word << 10;
-               if (spi->mode & SPI_CPHA)
-                       qmr |= MCFQSPI_QMR_CPHA;
-               if (spi->mode & SPI_CPOL)
-                       qmr |= MCFQSPI_QMR_CPOL;
-               if (t->speed_hz)
-                       qmr |= mcfqspi_qmr_baud(t->speed_hz);
-               else
-                       qmr |= mcfqspi_qmr_baud(spi->max_speed_hz);
-               mcfqspi_wr_qmr(mcfqspi, qmr);
+       struct mcfqspi *mcfqspi = spi_master_get_devdata(spi->master);
+       bool cs_high = spi->mode & SPI_CS_HIGH;
 
+       if (enable)
                mcfqspi_cs_select(mcfqspi, spi->chip_select, cs_high);
+       else
+               mcfqspi_cs_deselect(mcfqspi, spi->chip_select, cs_high);
+}
 
-               mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE);
-               if (t->bits_per_word == 8)
-                       mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf,
-                                       t->rx_buf);
-               else
-                       mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf,
-                                       t->rx_buf);
-               mcfqspi_wr_qir(mcfqspi, 0);
-
-               if (t->delay_usecs)
-                       udelay(t->delay_usecs);
-               if (t->cs_change) {
-                       if (!list_is_last(&t->transfer_list, &msg->transfers))
-                               mcfqspi_cs_deselect(mcfqspi, spi->chip_select,
-                                               cs_high);
-               } else {
-                       if (list_is_last(&t->transfer_list, &msg->transfers))
-                               mcfqspi_cs_deselect(mcfqspi, spi->chip_select,
-                                               cs_high);
-               }
-               msg->actual_length += t->len;
-       }
-       msg->status = status;
-       spi_finalize_current_message(master);
+static int mcfqspi_transfer_one(struct spi_master *master,
+                               struct spi_device *spi,
+                               struct spi_transfer *t)
+{
+       struct mcfqspi *mcfqspi = spi_master_get_devdata(master);
+       u16 qmr = MCFQSPI_QMR_MSTR;
+
+       qmr |= t->bits_per_word << 10;
+       if (spi->mode & SPI_CPHA)
+               qmr |= MCFQSPI_QMR_CPHA;
+       if (spi->mode & SPI_CPOL)
+               qmr |= MCFQSPI_QMR_CPOL;
+       if (t->speed_hz)
+               qmr |= mcfqspi_qmr_baud(t->speed_hz);
+       else
+               qmr |= mcfqspi_qmr_baud(spi->max_speed_hz);
+       mcfqspi_wr_qmr(mcfqspi, qmr);
 
-       return status;
+       mcfqspi_wr_qir(mcfqspi, MCFQSPI_QIR_SPIFE);
+       if (t->bits_per_word == 8)
+               mcfqspi_transfer_msg8(mcfqspi, t->len, t->tx_buf, t->rx_buf);
+       else
+               mcfqspi_transfer_msg16(mcfqspi, t->len / 2, t->tx_buf,
+                                      t->rx_buf);
+       mcfqspi_wr_qir(mcfqspi, 0);
 
+       return 0;
 }
 
 static int mcfqspi_setup(struct spi_device *spi)
@@ -438,7 +424,8 @@ static int mcfqspi_probe(struct platform_device *pdev)
        master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA;
        master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 16);
        master->setup = mcfqspi_setup;
-       master->transfer_one_message = mcfqspi_transfer_one_message;
+       master->set_cs = mcfqspi_set_cs;
+       master->transfer_one = mcfqspi_transfer_one;
        master->auto_runtime_pm = true;
 
        platform_set_drvdata(pdev, master);