From 11d6553a1fa3fe9e0665fe77dd1c2288fe796566 Mon Sep 17 00:00:00 2001 From: Pavan Kunapuli Date: Mon, 25 Jun 2012 15:37:46 +0530 Subject: 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 Reviewed-on: http://git-master/r/110826 (cherry picked from commit 33c8e504328387097ed0160082cce6b36b994bd8) Signed-off-by: Pavan Kunapuli Change-Id: I6683720a9bda1f779a63133d8ca64a024c5d8a08 Reviewed-on: http://git-master/r/116707 Reviewed-by: Rohan Somvanshi Tested-by: Rohan Somvanshi --- drivers/mmc/host/sdhci-tegra.c | 10 ---------- drivers/mmc/host/sdhci.c | 12 ++++++++---- drivers/mmc/host/sdhci.h | 1 - 3 files changed, 8 insertions(+), 15 deletions(-) (limited to 'drivers/mmc') 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); -- cgit v1.2.3