diff options
Diffstat (limited to 'drivers/mmc/host/sdhci.c')
-rw-r--r-- | drivers/mmc/host/sdhci.c | 12 |
1 files changed, 8 insertions, 4 deletions
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; |