aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjala <syrjala@sci.fi>2008-06-09 15:06:44 -0400
committerPierre Ossman <drzeus@drzeus.cx>2008-07-15 08:14:42 -0400
commit9da3cbaf2881df97e502593c49c93f55eb696091 (patch)
tree95bdc38a44f7b1292b7c3fe5337410153149d0c2
parent5385edc50063a2175383ef5e90aa67fb6ab1beae (diff)
at91_mci: Cover more AT91RM9200 and AT91SAM9261 errata.
According to the documentation the AT91SAM9261 MCI shares the block size limitations of the AT91RM9200 MCI. Also the errata documentation for AT91RM9200 and AT91SAM9261 state that stream commands are not supported. This has not been tested on actual hardware. Signed-off-by: Ville Syrjala <syrjala@sci.fi> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
-rw-r--r--drivers/mmc/host/at91_mci.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/mmc/host/at91_mci.c b/drivers/mmc/host/at91_mci.c
index d3e96ff41428..f8c3f7c330e3 100644
--- a/drivers/mmc/host/at91_mci.c
+++ b/drivers/mmc/host/at91_mci.c
@@ -520,11 +520,19 @@ static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command
520 520
521 if (data) { 521 if (data) {
522 522
523 if ( cpu_is_at91rm9200() && (data->blksz & 0x3) ) { 523 if (cpu_is_at91rm9200() || cpu_is_at91sam9261()) {
524 pr_debug("Unsupported block size\n"); 524 if (data->blksz & 0x3) {
525 cmd->error = -EINVAL; 525 pr_debug("Unsupported block size\n");
526 mmc_request_done(host->mmc, host->request); 526 cmd->error = -EINVAL;
527 return; 527 mmc_request_done(host->mmc, host->request);
528 return;
529 }
530 if (data->flags & MMC_DATA_STREAM) {
531 pr_debug("Stream commands not supported\n");
532 cmd->error = -EINVAL;
533 mmc_request_done(host->mmc, host->request);
534 return;
535 }
528 } 536 }
529 537
530 block_length = data->blksz; 538 block_length = data->blksz;
@@ -577,7 +585,7 @@ static void at91_mci_send_command(struct at91mci_host *host, struct mmc_command
577 mr |= AT91_MCI_PDCMODE; 585 mr |= AT91_MCI_PDCMODE;
578 at91_mci_write(host, AT91_MCI_MR, mr); 586 at91_mci_write(host, AT91_MCI_MR, mr);
579 587
580 if (!cpu_is_at91rm9200()) 588 if (!(cpu_is_at91rm9200() || cpu_is_at91sam9261()))
581 at91_mci_write(host, AT91_MCI_BLKR, 589 at91_mci_write(host, AT91_MCI_BLKR,
582 AT91_MCI_BLKR_BCNT(blocks) | 590 AT91_MCI_BLKR_BCNT(blocks) |
583 AT91_MCI_BLKR_BLKLEN(block_length)); 591 AT91_MCI_BLKR_BLKLEN(block_length));