diff mbox

mmc: add MMC_QUIRK_BROKEN_CLK_GATING

Message ID 1294002510-2324-1-git-send-email-tardyp@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Pierre Tardy Jan. 2, 2011, 9:08 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 92e3370..54cc461 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)
 	 * gate the clock, because there is somebody out there that may still
 	 * be using it.
 	 */
-	if (mmc_card_sdio(card))
-		return false;
-
-	return true;
+	return !(card->quirks & MMC_QUIRK_BROKEN_CLK_GATING);
 }
 
 /**
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 82f4b90..6df1ead 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -785,6 +785,12 @@  int mmc_attach_sdio(struct mmc_host *host, u32 ocr)
 
 	mmc_release_host(host);
 
+        /*
+         * see comments in mmc_host_may_gate_card()
+         * this can be overidden by function drivers if they know that
+         * their sdio card works with clock gating
+         */
+        card->quirks |= MMC_QUIRK_BROKEN_CLK_GATING;
 	/*
 	 * First add the card to the driver model...
 	 */
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 8ce0827..5071eb1 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -121,6 +121,7 @@  struct mmc_card {
 						/* for byte mode */
 #define MMC_QUIRK_NONSTD_SDIO	(1<<2)		/* non-standard SDIO card attached */
 						/* (missing CIA registers) */
+#define MMC_QUIRK_BROKEN_CLK_GATING (1<<3)	/* clock gating the sdio bus will make card fail */
 
 	unsigned int		erase_size;	/* erase size in sectors */
  	unsigned int		erase_shift;	/* if erase unit is power 2 */