Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / spi / spi-geni-qcom.c
index fdb7cb88fb5673aeebdb36887ea2befea1240513..5f0b0d5bfef48333fbf8fe36f3d2f2651e41bda0 100644 (file)
@@ -89,9 +89,6 @@ struct spi_geni_master {
        int irq;
 };
 
-static void handle_fifo_timeout(struct spi_master *spi,
-                               struct spi_message *msg);
-
 static int get_spi_clk_cfg(unsigned int speed_hz,
                        struct spi_geni_master *mas,
                        unsigned int *clk_idx,
@@ -122,6 +119,32 @@ static int get_spi_clk_cfg(unsigned int speed_hz,
        return ret;
 }
 
+static void handle_fifo_timeout(struct spi_master *spi,
+                               struct spi_message *msg)
+{
+       struct spi_geni_master *mas = spi_master_get_devdata(spi);
+       unsigned long time_left, flags;
+       struct geni_se *se = &mas->se;
+
+       spin_lock_irqsave(&mas->lock, flags);
+       reinit_completion(&mas->xfer_done);
+       mas->cur_mcmd = CMD_CANCEL;
+       geni_se_cancel_m_cmd(se);
+       writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
+       spin_unlock_irqrestore(&mas->lock, flags);
+       time_left = wait_for_completion_timeout(&mas->xfer_done, HZ);
+       if (time_left)
+               return;
+
+       spin_lock_irqsave(&mas->lock, flags);
+       reinit_completion(&mas->xfer_done);
+       geni_se_abort_m_cmd(se);
+       spin_unlock_irqrestore(&mas->lock, flags);
+       time_left = wait_for_completion_timeout(&mas->xfer_done, HZ);
+       if (!time_left)
+               dev_err(mas->dev, "Failed to cancel/abort m_cmd\n");
+}
+
 static void spi_geni_set_cs(struct spi_device *slv, bool set_flag)
 {
        struct spi_geni_master *mas = spi_master_get_devdata(slv->master);
@@ -233,7 +256,6 @@ static int spi_geni_prepare_message(struct spi_master *spi,
        struct geni_se *se = &mas->se;
 
        geni_se_select_mode(se, GENI_SE_FIFO);
-       reinit_completion(&mas->xfer_done);
        ret = setup_fifo_params(spi_msg->spi, spi);
        if (ret)
                dev_err(mas->dev, "Couldn't select mode %d\n", ret);
@@ -357,32 +379,6 @@ static void setup_fifo_xfer(struct spi_transfer *xfer,
                writel(mas->tx_wm, se->base + SE_GENI_TX_WATERMARK_REG);
 }
 
-static void handle_fifo_timeout(struct spi_master *spi,
-                               struct spi_message *msg)
-{
-       struct spi_geni_master *mas = spi_master_get_devdata(spi);
-       unsigned long time_left, flags;
-       struct geni_se *se = &mas->se;
-
-       spin_lock_irqsave(&mas->lock, flags);
-       reinit_completion(&mas->xfer_done);
-       mas->cur_mcmd = CMD_CANCEL;
-       geni_se_cancel_m_cmd(se);
-       writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
-       spin_unlock_irqrestore(&mas->lock, flags);
-       time_left = wait_for_completion_timeout(&mas->xfer_done, HZ);
-       if (time_left)
-               return;
-
-       spin_lock_irqsave(&mas->lock, flags);
-       reinit_completion(&mas->xfer_done);
-       geni_se_abort_m_cmd(se);
-       spin_unlock_irqrestore(&mas->lock, flags);
-       time_left = wait_for_completion_timeout(&mas->xfer_done, HZ);
-       if (!time_left)
-               dev_err(mas->dev, "Failed to cancel/abort m_cmd\n");
-}
-
 static int spi_geni_transfer_one(struct spi_master *spi,
                                struct spi_device *slv,
                                struct spi_transfer *xfer)