aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Hunter2015-11-26 06:00:50 -0600
committerGreg Kroah-Hartman2016-03-03 17:06:51 -0600
commit73195d5f9f5097b8d5c130be96912e0fc11f661d (patch)
tree56ad81be158aabb6b2d61fb81990291ac1981265
parent8dedf98a03b31c7087e22753024e282b47a8690f (diff)
downloadkernel-video-73195d5f9f5097b8d5c130be96912e0fc11f661d.tar.gz
kernel-video-73195d5f9f5097b8d5c130be96912e0fc11f661d.tar.xz
kernel-video-73195d5f9f5097b8d5c130be96912e0fc11f661d.zip
mmc: sdhci: Fix sdhci_runtime_pm_bus_on/off()
commit 5c671c410c8704800f4f1673b6f572137e7e6ddd upstream. sdhci has a legacy facility to prevent runtime suspend if the bus power is on. This is needed in cases where the power to the card is dependent on the bus power. It is controlled by a pair of functions: sdhci_runtime_pm_bus_on() and sdhci_runtime_pm_bus_off(). These functions use a boolean variable 'bus_on' to ensure changes are always paired. There is an additional check for 'runtime_suspended' which is the problem. In fact, its use is ill-conceived as the only requirement for the logic is that 'on' and 'off' are paired, which is actually broken by the check, for example if the bus power is turned on during runtime resume. So remove the check. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/mmc/host/sdhci.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 881bf89acfc..75d3c28940f 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2663,7 +2663,7 @@ static int sdhci_runtime_pm_put(struct sdhci_host *host)
2663 2663
2664static void sdhci_runtime_pm_bus_on(struct sdhci_host *host) 2664static void sdhci_runtime_pm_bus_on(struct sdhci_host *host)
2665{ 2665{
2666 if (host->runtime_suspended || host->bus_on) 2666 if (host->bus_on)
2667 return; 2667 return;
2668 host->bus_on = true; 2668 host->bus_on = true;
2669 pm_runtime_get_noresume(host->mmc->parent); 2669 pm_runtime_get_noresume(host->mmc->parent);
@@ -2671,7 +2671,7 @@ static void sdhci_runtime_pm_bus_on(struct sdhci_host *host)
2671 2671
2672static void sdhci_runtime_pm_bus_off(struct sdhci_host *host) 2672static void sdhci_runtime_pm_bus_off(struct sdhci_host *host)
2673{ 2673{
2674 if (host->runtime_suspended || !host->bus_on) 2674 if (!host->bus_on)
2675 return; 2675 return;
2676 host->bus_on = false; 2676 host->bus_on = false;
2677 pm_runtime_put_noidle(host->mmc->parent); 2677 pm_runtime_put_noidle(host->mmc->parent);