aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorPierre Tardy <tardyp@gmail.com>2011-02-06 13:03:47 -0500
committerChris Ball <cjb@laptop.org>2011-03-15 13:48:35 -0400
commitdb9935000d95ae3f9702b7ff6ac0eef2319d8772 (patch)
tree86f75ca6ec0b73c728f19b0dd43e8702bef448bc /drivers/mmc
parent57f0adc7eaaf4315d568e72069dbe48aa7e20995 (diff)
mmc: add MMC_QUIRK_BROKEN_CLK_GATING
Some sdio card are not following sdio standard, and do not work when the sdio bus's clock is gated. To keep functionnality for all legacy driver, we turn this quirk on for every sdio card. Drivers needs to disable the quirk manually when someone verifies that their supported card works with clock gating. Signed-off-by: Pierre Tardy <tardyp@gmail.com> Acked-by: Ohad Ben-Cohen <ohad@wizery.com> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/core/host.c5
-rw-r--r--drivers/mmc/core/quirks.c13
2 files changed, 14 insertions, 4 deletions
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index b3ac6c5bc5c6..461e6a17fb90 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -160,10 +160,7 @@ static bool mmc_host_may_gate_card(struct mmc_card *card)
160 * gate the clock, because there is somebody out there that may still 160 * gate the clock, because there is somebody out there that may still
161 * be using it. 161 * be using it.
162 */ 162 */
163 if (mmc_card_sdio(card)) 163 return !(card->quirks & MMC_QUIRK_BROKEN_CLK_GATING);
164 return false;
165
166 return true;
167} 164}
168 165
169/** 166/**
diff --git a/drivers/mmc/core/quirks.c b/drivers/mmc/core/quirks.c
index e18cb49c12b1..890843129e3b 100644
--- a/drivers/mmc/core/quirks.c
+++ b/drivers/mmc/core/quirks.c
@@ -40,7 +40,20 @@ static void __maybe_unused remove_quirk(struct mmc_card *card, int data)
40 card->quirks &= ~data; 40 card->quirks &= ~data;
41} 41}
42 42
43/*
44 * This hook just adds a quirk for all sdio devices
45 */
46static void add_quirk_for_sdio_devices(struct mmc_card *card, int data)
47{
48 if (mmc_card_sdio(card))
49 card->quirks |= data;
50}
51
43static const struct mmc_fixup mmc_fixup_methods[] = { 52static const struct mmc_fixup mmc_fixup_methods[] = {
53 /* by default sdio devices are considered CLK_GATING broken */
54 /* good cards will be whitelisted as they are tested */
55 { SDIO_ANY_ID, SDIO_ANY_ID,
56 add_quirk_for_sdio_devices, MMC_QUIRK_BROKEN_CLK_GATING }
44 { 0 } 57 { 0 }
45}; 58};
46 59