}
 }
 
-static void tmio_mmc_hw_reset(struct mmc_host *mmc)
-{
-       struct tmio_mmc_host *host = mmc_priv(mmc);
-
-       host->reset(host);
-
-       tmio_mmc_abort_dma(host);
-
-       if (host->hw_reset)
-               host->hw_reset(host);
-}
-
 static void tmio_mmc_reset_work(struct work_struct *work)
 {
        struct tmio_mmc_host *host = container_of(work, struct tmio_mmc_host,
 
        spin_unlock_irqrestore(&host->lock, flags);
 
-       tmio_mmc_hw_reset(host->mmc);
+       host->reset(host);
 
        /* Ready for new calls */
        host->mrq = NULL;
 
+       tmio_mmc_abort_dma(host);
        mmc_request_done(host->mmc, mrq);
 }
 
        return 0;
 }
 
+static void tmio_mmc_hw_reset(struct mmc_host *mmc)
+{
+       struct tmio_mmc_host *host = mmc_priv(mmc);
+
+       if (host->hw_reset)
+               host->hw_reset(host);
+}
+
 static int tmio_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
 {
        struct tmio_mmc_host *host = mmc_priv(mmc);
 
        if (ret < 0) {
                dev_warn(&host->pdev->dev, "Tuning procedure failed\n");
-               tmio_mmc_hw_reset(mmc);
+               host->reset(host);
        }
 
        return ret;
                _host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
 
        _host->set_clock(_host, 0);
-       tmio_mmc_hw_reset(mmc);
+       _host->reset(_host);
 
        _host->sdcard_irq_mask = sd_ctrl_read16_and_16_as_32(_host, CTL_IRQ_MASK);
        tmio_mmc_disable_mmc_irqs(_host, TMIO_MASK_ALL);
        struct tmio_mmc_host *host = dev_get_drvdata(dev);
 
        tmio_mmc_clk_enable(host);
-       tmio_mmc_hw_reset(host->mmc);
+       host->reset(host);
 
        if (host->clk_cache)
                host->set_clock(host, host->clk_cache);