diff options
author | Philippe Langlais <philippe.langlais@linaro.org> | 2011-03-22 11:53:06 +0100 |
---|---|---|
committer | Robert Marklund <robert.marklund@stericsson.com> | 2011-05-04 18:04:59 +0200 |
commit | 32030d8dd85c0de40aac5d108bc8f82283013e91 (patch) | |
tree | 17d2d467f7573588c08c841ca9ac095cf366a821 /drivers/mmc | |
parent | 178133e8dcd2f718c832932dda166261d1ee0d53 (diff) |
SDIO: Add workaround for client with broken CMD53
Adds a workaround which can be turned on for SDIO devices
that do not support 512 byte requests in byte mode during
CMD53. These requests will always be sent in block mode
instead.
ST-Ericsson ID: AP272999
Change-Id: I9923e87d2be43e0139af6648f3add522d65ab5ad
Signed-off-by: Stefan Nilsson XK <stefan.xk.nilsson@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/15092
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/core/sdio_ops.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/mmc/core/sdio_ops.c b/drivers/mmc/core/sdio_ops.c index dea36d9c22e..4e3b3004013 100644 --- a/drivers/mmc/core/sdio_ops.c +++ b/drivers/mmc/core/sdio_ops.c @@ -152,10 +152,15 @@ int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn, cmd.arg |= fn << 28; cmd.arg |= incr_addr ? 0x04000000 : 0x00000000; cmd.arg |= addr << 9; - if (blocks == 1 && blksz <= 512) - cmd.arg |= (blksz == 512) ? 0 : blksz; /* byte mode */ + + if (blocks == 1 && blksz < 512) + cmd.arg |= blksz; /* byte mode */ + else if (blocks == 1 && blksz == 512 && + !(card->host->caps & MMC_CAP_BROKEN_SDIO_CMD53)) + cmd.arg |= 0; /* byte mode, 0=512 */ else cmd.arg |= 0x08000000 | blocks; /* block mode */ + cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC; data.blksz = blksz; |