]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
mmc: tegra: disable card clk before setting tap
authorNaveen Kumar Arepalli <naveenk@nvidia.com>
Wed, 15 Oct 2014 05:35:38 +0000 (11:05 +0530)
committerEric Chuang <echuang@nvidia.com>
Wed, 22 Oct 2014 06:05:54 +0000 (23:05 -0700)
-disable card clk.
-update the tap value.
-enable card clk.

Bug 1559166

Change-Id: I4b0586535248b36cfa1522e1c69c45282f1f903f
Signed-off-by: Naveen Kumar Arepalli <naveenk@nvidia.com>
Reviewed-on: http://git-master/r/557203
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com>
Reviewed-by: R Raj Kumar <rrajk@nvidia.com>
Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>
drivers/mmc/host/sdhci-tegra.c

index b4abc3a0b6f2792d4a161581757d0695d6a890dc..40aea2dc560b4751a9631fbc7fac385c106c5d97 100644 (file)
@@ -1696,6 +1696,7 @@ static void sdhci_tegra_set_tap_delay(struct sdhci_host *sdhci,
        unsigned int tap_delay)
 {
        u32 vendor_ctrl;
+       u16 clk;
 
        /* Max tap delay value is 255 */
        if (tap_delay > MAX_TAP_VALUES) {
@@ -1706,10 +1707,18 @@ static void sdhci_tegra_set_tap_delay(struct sdhci_host *sdhci,
                return;
        }
 
+       clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
+       clk &= ~SDHCI_CLOCK_CARD_EN;
+       sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
+
        vendor_ctrl = sdhci_readl(sdhci, SDHCI_VNDR_CLK_CTRL);
        vendor_ctrl &= ~(0xFF << SDHCI_VNDR_CLK_CTRL_TAP_VALUE_SHIFT);
        vendor_ctrl |= (tap_delay << SDHCI_VNDR_CLK_CTRL_TAP_VALUE_SHIFT);
        sdhci_writel(sdhci, vendor_ctrl, SDHCI_VNDR_CLK_CTRL);
+
+       clk = sdhci_readw(sdhci, SDHCI_CLOCK_CONTROL);
+       clk |= SDHCI_CLOCK_CARD_EN;
+       sdhci_writew(sdhci, clk, SDHCI_CLOCK_CONTROL);
 }
 
 static void sdhci_tegra_set_trim_delay(struct sdhci_host *sdhci,