Merge tag 'net-next-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev...
[linux-2.6-microblaze.git] / drivers / mmc / host / usdhi6rol0.c
index b9b79b1..99515be 100644 (file)
@@ -631,9 +631,9 @@ static void usdhi6_dma_kill(struct usdhi6_host *host)
                __func__, data->sg_len, data->blocks, data->blksz);
        /* Abort DMA */
        if (data->flags & MMC_DATA_READ)
-               dmaengine_terminate_all(host->chan_rx);
+               dmaengine_terminate_sync(host->chan_rx);
        else
-               dmaengine_terminate_all(host->chan_tx);
+               dmaengine_terminate_sync(host->chan_tx);
 }
 
 static void usdhi6_dma_check_error(struct usdhi6_host *host)
@@ -1186,6 +1186,15 @@ static int usdhi6_sig_volt_switch(struct mmc_host *mmc, struct mmc_ios *ios)
        return ret;
 }
 
+static int usdhi6_card_busy(struct mmc_host *mmc)
+{
+       struct usdhi6_host *host = mmc_priv(mmc);
+       u32 tmp = usdhi6_read(host, USDHI6_SD_INFO2);
+
+       /* Card is busy if it is pulling dat[0] low */
+       return !(tmp & USDHI6_SD_INFO2_SDDAT0);
+}
+
 static const struct mmc_host_ops usdhi6_ops = {
        .request        = usdhi6_request,
        .set_ios        = usdhi6_set_ios,
@@ -1193,6 +1202,7 @@ static const struct mmc_host_ops usdhi6_ops = {
        .get_ro         = usdhi6_get_ro,
        .enable_sdio_irq = usdhi6_enable_sdio_irq,
        .start_signal_voltage_switch = usdhi6_sig_volt_switch,
+       .card_busy = usdhi6_card_busy,
 };
 
 /*                     State machine handlers                          */