Currently "mmc sleep" is used before power off and
is not paired with waking up. Nevertheless hold
re-tuning.

Signed-off-by: Adrian Hunter <adrian.hun...@intel.com>
---
 drivers/mmc/core/mmc.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index f36c76f..daf9954 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -21,6 +21,7 @@
 #include <linux/mmc/mmc.h>
 
 #include "core.h"
+#include "host.h"
 #include "bus.h"
 #include "mmc_ops.h"
 #include "sd_ops.h"
@@ -1504,6 +1505,7 @@ static int mmc_can_sleep(struct mmc_card *card)
        return (card && card->ext_csd.rev >= 3);
 }
 
+/* If necessary, callers must hold re-tuning */
 static int mmc_sleep(struct mmc_host *host)
 {
        struct mmc_command cmd = {0};
@@ -1631,6 +1633,7 @@ static int _mmc_suspend(struct mmc_host *host, bool 
is_suspend)
        int err = 0;
        unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT :
                                        EXT_CSD_POWER_OFF_LONG;
+       bool retune_release = false;
 
        BUG_ON(!host);
        BUG_ON(!host->card);
@@ -1651,17 +1654,22 @@ static int _mmc_suspend(struct mmc_host *host, bool 
is_suspend)
                goto out;
 
        if (mmc_can_poweroff_notify(host->card) &&
-               ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend))
+               ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend)) {
                err = mmc_poweroff_notify(host->card, notify_type);
-       else if (mmc_can_sleep(host->card))
+       } else if (mmc_can_sleep(host->card)) {
+               mmc_retune_hold(host);
                err = mmc_sleep(host);
-       else if (!mmc_host_is_spi(host))
+       } else if (!mmc_host_is_spi(host)) {
                err = mmc_deselect_cards(host);
+       }
 
        if (!err) {
                mmc_power_off(host);
                mmc_card_set_suspended(host->card);
        }
+
+       if (retune_release)
+               mmc_retune_release(host);
 out:
        mmc_release_host(host);
        return err;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to