DTRAN_CTRL_DM_START);
 }
 
-static void renesas_sdhi_internal_dmac_complete_tasklet_fn(unsigned long arg)
+static bool renesas_sdhi_internal_dmac_complete(struct tmio_mmc_host *host)
 {
-       struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg;
        enum dma_data_direction dir;
 
-       spin_lock_irq(&host->lock);
-
        if (!host->data)
-               goto out;
+               return false;
 
        if (host->data->flags & MMC_DATA_READ)
                dir = DMA_FROM_DEVICE;
        if (dir == DMA_FROM_DEVICE)
                clear_bit(SDHI_INTERNAL_DMAC_RX_IN_USE, &global_flags);
 
+       return true;
+}
+
+static void renesas_sdhi_internal_dmac_complete_tasklet_fn(unsigned long arg)
+{
+       struct tmio_mmc_host *host = (struct tmio_mmc_host *)arg;
+
+       spin_lock_irq(&host->lock);
+       if (!renesas_sdhi_internal_dmac_complete(host))
+               goto out;
+
        tmio_mmc_do_data_irq(host);
 out:
        spin_unlock_irq(&host->lock);