summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/sd.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-04-08 14:33:59 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-08 14:33:59 -0700
commitd2e2d7ca14f123cb1d03408c2bc6db8d402f416d (patch)
treefb8558272384fccce3bcce99bd471113e97b3e47 /drivers/mmc/core/sd.c
parent7831d56b0a3544cbb6f82f76c34ca95e24d5b676 (diff)
parentab5a643cf597f2214feb6ff7288c72589661bde1 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc: mmc_spi: support for non-byte-aligned cards omap_hsmmc: Do not expect cmd/data to be non-null when CC/TC occurs mmc: Fix compile for omap_hsmmc.c mmc_spi: convert timeout handling to jiffies and avoid busy waiting mmc_spi: do not check CID and CSD blocks with CRC16 omap_hsmmc: Flush posted write to IRQ New mail address for Pierre Ossman imxmmc: move RSSR BLR imxmmc: init-exit rework mmc: Accept EXT_CSD rev 1.3 since it is backwards compatible with 1.2
Diffstat (limited to 'drivers/mmc/core/sd.c')
-rw-r--r--drivers/mmc/core/sd.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 26fc098d77c..cd81c395e16 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -363,15 +363,6 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
goto err;
/*
- * For SPI, enable CRC as appropriate.
- */
- if (mmc_host_is_spi(host)) {
- err = mmc_spi_set_crc(host, use_spi_crc);
- if (err)
- goto err;
- }
-
- /*
* Fetch CID from card.
*/
if (mmc_host_is_spi(host))
@@ -458,6 +449,18 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
}
/*
+ * For SPI, enable CRC as appropriate.
+ * This CRC enable is located AFTER the reading of the
+ * card registers because some SDHC cards are not able
+ * to provide valid CRCs for non-512-byte blocks.
+ */
+ if (mmc_host_is_spi(host)) {
+ err = mmc_spi_set_crc(host, use_spi_crc);
+ if (err)
+ goto free_card;
+ }
+
+ /*
* Attempt to change to high-speed (if supported)
*/
err = mmc_switch_hs(card);