diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2012-10-12 09:07:36 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-10-18 06:06:23 -0400 |
commit | 70ac09358cc52f3ddbf73555dc150d486a7133bb (patch) | |
tree | 8d210b8a67722192b37b0b7c6b4fa233703efdbf | |
parent | 06c1a121805d7870abbf037d3ccd9a609a5219f2 (diff) |
ARM: 7552/1: mmc: mmci: Switching off HWFC for SDIO depends on MCLK
For writes, HWFC shall be switched off when transfer size <= 8
bytes and when MCLK rate is above 50 MHz. For 50MHz and below
it shall be switched off when transfer size < 8 bytes.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Johan Rudholm <johan.rudholm@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | drivers/mmc/host/mmci.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 877079e778cd..cd0fbee0b1c0 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
@@ -664,12 +664,14 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data) | |||
664 | datactrl |= MCI_ST_DPSM_SDIOEN; | 664 | datactrl |= MCI_ST_DPSM_SDIOEN; |
665 | 665 | ||
666 | /* | 666 | /* |
667 | * The ST Micro variant for SDIO transfer sizes | 667 | * The ST Micro variant for SDIO small write transfers |
668 | * less then 8 bytes should have clock H/W flow | 668 | * needs to have clock H/W flow control disabled, |
669 | * control disabled. | 669 | * otherwise the transfer will not start. The threshold |
670 | * depends on the rate of MCLK. | ||
670 | */ | 671 | */ |
671 | if ((host->size < 8) && | 672 | if (data->flags & MMC_DATA_WRITE && |
672 | (data->flags & MMC_DATA_WRITE)) | 673 | (host->size < 8 || |
674 | (host->size <= 8 && host->mclk > 50000000))) | ||
673 | clk = host->clk_reg & ~variant->clkreg_enable; | 675 | clk = host->clk_reg & ~variant->clkreg_enable; |
674 | else | 676 | else |
675 | clk = host->clk_reg | variant->clkreg_enable; | 677 | clk = host->clk_reg | variant->clkreg_enable; |