summaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorPavan Kunapuli <pkunapuli@nvidia.com>2012-06-25 15:37:46 +0530
committerRohan Somvanshi <rsomvanshi@nvidia.com>2012-07-19 09:19:34 -0700
commit11d6553a1fa3fe9e0665fe77dd1c2288fe796566 (patch)
treedc2cc8e03fa45fcaa3f79f700daf64583a3bf9e4 /drivers/mmc
parent0245741903a5b16a27cb30ad09bb9fada84f1eca (diff)
Revert "mmc: host: Disable SDIO card clock when idle for Tegra 3 only"
Without the card clock, inband interrupt is not working on some wifi chips. Bug 981683 This reverts commit 0467657691ba046b492504272baf7c626d9a3713. Signed-off-by: Pavan Kunapuli <pkunapuli@nvidia.com> Reviewed-on: http://git-master/r/110826 (cherry picked from commit 33c8e504328387097ed0160082cce6b36b994bd8) Signed-off-by: Pavan Kunapuli <pkunapuli@nvidia.com> Change-Id: I6683720a9bda1f779a63133d8ca64a024c5d8a08 Reviewed-on: http://git-master/r/116707 Reviewed-by: Rohan Somvanshi <rsomvanshi@nvidia.com> Tested-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/sdhci-tegra.c10
-rw-r--r--drivers/mmc/host/sdhci.c12
-rw-r--r--drivers/mmc/host/sdhci.h1
3 files changed, 8 insertions, 15 deletions
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index 86cee262b8fd..d25400d7d1ce 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -70,14 +70,11 @@
static unsigned int tegra_sdhost_min_freq;
static unsigned int tegra_sdhost_std_freq;
-
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock);
static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci);
static unsigned int tegra3_sdhost_max_clk[4] = {
208000000, 104000000, 208000000, 104000000 };
-#endif
struct tegra_sdhci_hw_ops{
/* Set the internal clk and card clk.*/
@@ -190,7 +187,6 @@ static unsigned int tegra_sdhci_get_ro(struct sdhci_host *sdhci)
return gpio_get_value(plat->wp_gpio);
}
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci)
{
u16 misc_ctrl;
@@ -227,7 +223,6 @@ static void tegra3_sdhci_post_reset_init(struct sdhci_host *sdhci)
SDHCI_VENDOR_MISC_CNTRL_ENABLE_SDR50_SUPPORT;
sdhci_writew(sdhci, misc_ctrl, SDHCI_VENDOR_MISC_CNTRL);
}
-#endif
static int tegra_sdhci_set_uhs_signaling(struct sdhci_host *host,
unsigned int uhs)
@@ -411,7 +406,6 @@ static void tegra_sdhci_set_clk_rate(struct sdhci_host *sdhci,
sdhci->max_clk = clk_get_rate(pltfm_host->clk);
}
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
static void tegra_3x_sdhci_set_card_clock(struct sdhci_host *sdhci, unsigned int clock)
{
int div;
@@ -496,7 +490,6 @@ set_clk:
out:
sdhci->clock = clock;
}
-#endif
static void tegra_sdhci_set_clock(struct sdhci_host *sdhci, unsigned int clock)
{
@@ -918,9 +911,6 @@ static struct sdhci_ops tegra_sdhci_ops = {
.read_w = tegra_sdhci_readw,
.write_l = tegra_sdhci_writel,
.platform_8bit_width = tegra_sdhci_8bit,
-#ifdef CONFIG_ARCH_TEGRA_3x_SOC
- .set_card_clock = tegra_3x_sdhci_set_card_clock,
-#endif
.set_clock = tegra_sdhci_set_clock,
.suspend = tegra_sdhci_suspend,
.resume = tegra_sdhci_resume,
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 22814660bc34..6c86278b22ab 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1849,6 +1849,7 @@ static void sdhci_enable_preset_value(struct mmc_host *mmc, bool enable)
int sdhci_enable(struct mmc_host *mmc)
{
struct sdhci_host *host = mmc_priv(mmc);
+ u16 clk;
if (!mmc->card)
return 0;
@@ -1859,8 +1860,9 @@ int sdhci_enable(struct mmc_host *mmc)
host->ops->set_clock(host, mmc->ios.clock);
sdhci_set_clock(host, mmc->ios.clock);
} else {
- if (host->ops->set_card_clock)
- host->ops->set_card_clock(host, mmc->ios.clock);
+ clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
+ clk |= SDHCI_CLOCK_CARD_EN;
+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
}
}
@@ -1870,6 +1872,7 @@ int sdhci_enable(struct mmc_host *mmc)
int sdhci_disable(struct mmc_host *mmc, int lazy)
{
struct sdhci_host *host = mmc_priv(mmc);
+ u16 clk;
if (!mmc->card)
return 0;
@@ -1880,8 +1883,9 @@ int sdhci_disable(struct mmc_host *mmc, int lazy)
if (host->ops->set_clock)
host->ops->set_clock(host, 0);
} else {
- if (host->ops->set_card_clock)
- host->ops->set_card_clock(host, 0);
+ clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
+ clk &= ~SDHCI_CLOCK_CARD_EN;
+ sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
}
return 0;
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index bf48767e0ef2..c00833de19da 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -260,7 +260,6 @@ struct sdhci_ops {
#endif
void (*set_clock)(struct sdhci_host *host, unsigned int clock);
- void (*set_card_clock)(struct sdhci_host *host, unsigned int clock);
int (*enable_dma)(struct sdhci_host *host);
unsigned int (*get_max_clock)(struct sdhci_host *host);