summaryrefslogtreecommitdiff
path: root/drivers/mmc/core
diff options
context:
space:
mode:
authorVeerabhadrarao Badiganti <vbadigan@codeaurora.org>2017-04-04 12:38:24 +0530
committerVeerabhadrarao Badiganti <vbadigan@codeaurora.org>2017-04-04 17:00:02 +0530
commit26e54a44f6b4fa3b59e6bb404811b975a3d21bb4 (patch)
treed4deeae4fedc364d7a77444e8d94d530eb9300cf /drivers/mmc/core
parent9af69213de642f19b19f77e04f23de9f66b6b0f0 (diff)
mmc: core: Increase the runtime PM reference count in try_claim_host
Runtime PM reference count is being increased in mmc_claim_host() and is decreased in mmc_release_host(). This reference count is kept during the complete cycle of a claim -> release host. Same need to be done even in mmc_try_claim_host() as well. Increase the runtime PM reference count by invoking pm_runtime_get_sync() from mmc_try_claim_host() upon first successful claim. Without this change the runtime PM reference count goes for a toss since count is not getting incremented in mmc_try_claim_host() but is getting decremented in mmc_release_host(). Change-Id: I77836875b4700a4bf3dbde2bf1abdf2ad36c4cac Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
Diffstat (limited to 'drivers/mmc/core')
-rw-r--r--drivers/mmc/core/core.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 5396e1d00178..c409f713d4f0 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2126,6 +2126,7 @@ int mmc_try_claim_host(struct mmc_host *host, unsigned int delay_ms)
int claimed_host = 0;
unsigned long flags;
int retry_cnt = delay_ms/10;
+ bool pm = false;
do {
spin_lock_irqsave(&host->lock, flags);
@@ -2134,11 +2135,17 @@ int mmc_try_claim_host(struct mmc_host *host, unsigned int delay_ms)
host->claimer = current;
host->claim_cnt += 1;
claimed_host = 1;
+ if (host->claim_cnt == 1)
+ pm = true;
}
spin_unlock_irqrestore(&host->lock, flags);
if (!claimed_host)
mmc_delay(10);
} while (!claimed_host && retry_cnt--);
+
+ if (pm)
+ pm_runtime_get_sync(mmc_dev(host));
+
if (host->ops->enable && claimed_host && host->claim_cnt == 1)
host->ops->enable(host);
return claimed_host;