mmc: tmio: factor out common parts of the reset routine
[sfrench/cifs-2.6.git] / drivers / mmc / host / tmio_mmc_core.c
index 946fb013c61081facae2cf2a230f6b99b632d777..f68c10b8ed611d280725fc536d4df9e5cb8666bb 100644 (file)
@@ -172,24 +172,15 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host)
        sd_ctrl_write16(host, CTL_RESET_SD, 0x0001);
        usleep_range(10000, 11000);
 
+       if (host->reset)
+               host->reset(host);
+
        if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) {
                sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
                sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
        }
 }
 
-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,
@@ -228,11 +219,12 @@ static void tmio_mmc_reset_work(struct work_struct *work)
 
        spin_unlock_irqrestore(&host->lock, flags);
 
-       tmio_mmc_hw_reset(host->mmc);
+       tmio_mmc_reset(host);
 
        /* Ready for new calls */
        host->mrq = NULL;
 
+       tmio_mmc_abort_dma(host);
        mmc_request_done(host->mmc, mrq);
 }
 
@@ -732,7 +724,7 @@ static int tmio_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
 
        if (ret < 0) {
                dev_warn(&host->pdev->dev, "Tuning procedure failed\n");
-               tmio_mmc_hw_reset(mmc);
+               tmio_mmc_reset(host);
        }
 
        return ret;
@@ -1011,7 +1003,6 @@ static struct mmc_host_ops tmio_mmc_ops = {
        .get_cd         = tmio_mmc_get_cd,
        .enable_sdio_irq = tmio_mmc_enable_sdio_irq,
        .multi_io_quirk = tmio_multi_io_quirk,
-       .hw_reset       = tmio_mmc_hw_reset,
        .execute_tuning = tmio_mmc_execute_tuning,
 };
 
@@ -1156,9 +1147,6 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)
                                  mmc->caps & MMC_CAP_NEEDS_POLL ||
                                  !mmc_card_is_removable(mmc));
 
-       if (!_host->reset)
-               _host->reset = tmio_mmc_reset;
-
        /*
         * On Gen2+, eMMC with NONREMOVABLE currently fails because native
         * hotplug gets disabled. It seems RuntimePM related yet we need further
@@ -1180,7 +1168,7 @@ int tmio_mmc_host_probe(struct tmio_mmc_host *_host)
                _host->sdio_irq_mask = TMIO_SDIO_MASK_ALL;
 
        _host->set_clock(_host, 0);
-       tmio_mmc_hw_reset(mmc);
+       tmio_mmc_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);
@@ -1283,7 +1271,7 @@ int tmio_mmc_host_runtime_resume(struct device *dev)
        struct tmio_mmc_host *host = dev_get_drvdata(dev);
 
        tmio_mmc_clk_enable(host);
-       tmio_mmc_hw_reset(host->mmc);
+       tmio_mmc_reset(host);
 
        if (host->clk_cache)
                host->set_clock(host, host->clk_cache);