The commit  d7b4394e[Cleanup the omap2_mcspi_txrx_dma function]
changed the wait_for_completion order. Move the wait so that the
rx doesnot wait for the tx to complete.

Reported-and-tested-by: Sørensen, Stefan <soren...@polycom.com>
Signed-off-by: Shubhrajyoti D <shubhrajy...@ti.com>
---
 drivers/spi/spi-omap2-mcspi.c |   39 +++++++++++++++++++--------------------
 1 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index bcfd062..251f6d0 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -323,18 +323,13 @@ static void omap2_mcspi_tx_dma(struct spi_device *spi,
        struct omap2_mcspi      *mcspi;
        struct omap2_mcspi_dma  *mcspi_dma;
        unsigned int            count;
-       u8                      * rx;
        const u8                * tx;
-       void __iomem            *chstat_reg;
-       struct omap2_mcspi_cs   *cs = spi->controller_state;
 
        mcspi = spi_master_get_devdata(spi->master);
        mcspi_dma = &mcspi->dma_channels[spi->chip_select];
        count = xfer->len;
 
-       rx = xfer->rx_buf;
        tx = xfer->tx_buf;
-       chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
 
        if (mcspi_dma->dma_tx) {
                struct dma_async_tx_descriptor *tx;
@@ -359,19 +354,6 @@ static void omap2_mcspi_tx_dma(struct spi_device *spi,
        dma_async_issue_pending(mcspi_dma->dma_tx);
        omap2_mcspi_set_dma_req(spi, 0, 1);
 
-       wait_for_completion(&mcspi_dma->dma_tx_completion);
-       dma_unmap_single(mcspi->dev, xfer->tx_dma, count,
-                        DMA_TO_DEVICE);
-
-       /* for TX_ONLY mode, be sure all words have shifted out */
-       if (rx == NULL) {
-               if (mcspi_wait_for_reg_bit(chstat_reg,
-                                       OMAP2_MCSPI_CHSTAT_TXS) < 0)
-                       dev_err(&spi->dev, "TXS timed out\n");
-               else if (mcspi_wait_for_reg_bit(chstat_reg,
-                                       OMAP2_MCSPI_CHSTAT_EOT) < 0)
-                       dev_err(&spi->dev, "EOT timed out\n");
-       }
 }
 
 static unsigned
@@ -492,6 +474,7 @@ omap2_mcspi_txrx_dma(struct spi_device *spi, struct 
spi_transfer *xfer)
        struct dma_slave_config cfg;
        enum dma_slave_buswidth width;
        unsigned es;
+       void __iomem            *chstat_reg;
 
        mcspi = spi_master_get_devdata(spi->master);
        mcspi_dma = &mcspi->dma_channels[spi->chip_select];
@@ -526,8 +509,24 @@ omap2_mcspi_txrx_dma(struct spi_device *spi, struct 
spi_transfer *xfer)
                omap2_mcspi_tx_dma(spi, xfer, cfg);
 
        if (rx != NULL)
-               return omap2_mcspi_rx_dma(spi, xfer, cfg, es);
-
+               count = omap2_mcspi_rx_dma(spi, xfer, cfg, es);
+
+       if (tx != NULL) {
+               chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
+               wait_for_completion(&mcspi_dma->dma_tx_completion);
+               dma_unmap_single(mcspi->dev, xfer->tx_dma, xfer->len,
+                                DMA_TO_DEVICE);
+
+               /* for TX_ONLY mode, be sure all words have shifted out */
+               if (rx == NULL) {
+                       if (mcspi_wait_for_reg_bit(chstat_reg,
+                                               OMAP2_MCSPI_CHSTAT_TXS) < 0)
+                               dev_err(&spi->dev, "TXS timed out\n");
+                       else if (mcspi_wait_for_reg_bit(chstat_reg,
+                                               OMAP2_MCSPI_CHSTAT_EOT) < 0)
+                               dev_err(&spi->dev, "EOT timed out\n");
+               }
+       }
        return count;
 }
 
-- 
1.7.5.4


------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to