]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00220469 mmc: sdio: claim host on suspend and release on resuming
authorRyan QIAN <b32804@freescale.com>
Tue, 9 Oct 2012 00:58:41 +0000 (08:58 +0800)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:35:31 +0000 (08:35 +0200)
issue:
Since there's no sync mechanism between sdio bus suspending and sdio_irq_thread,
it will cause that sdio_irq_thread still makes sdhc request even after sdio bus
suspends.

fix:
On suspending sdio bus, claim host, so that:
1. mmc_sdio_suspend will wait for finishing of sdio_irq_thread.
2. sdio_irq_thread will be blocked even being scheduled.
And release host on resuming.

Acked-by: Aisheng DONG <b29396@freescale.com>
Signed-off-by: Ryan QIAN <b32804@freescale.com>
drivers/mmc/core/sdio.c

index 16b7484917c7d93fab61a887676872bf5d9327ac..cc3736bedb2bfe6d48824ba1bbbf16b8e5d94558 100644 (file)
@@ -638,6 +638,9 @@ static int mmc_sdio_suspend(struct mmc_host *host)
                mmc_release_host(host);
        }
 
+       if (!err)
+               mmc_claim_host(host);
+
        return err;
 }
 
@@ -648,9 +651,6 @@ static int mmc_sdio_resume(struct mmc_host *host)
        BUG_ON(!host);
        BUG_ON(!host->card);
 
-       /* Basic card reinitialization. */
-       mmc_claim_host(host);
-
        /* No need to reinitialize powered-resumed nonremovable cards */
        if (mmc_card_is_removable(host) && !mmc_card_keep_power(host))
                err = mmc_sdio_init_card(host, host->ocr, host->card,