aboutsummaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorPhilippe Langlais <philippe.langlais@linaro.org>2011-03-22 11:53:06 +0100
committerRobert Marklund <robert.marklund@stericsson.com>2011-05-04 18:04:59 +0200
commit32030d8dd85c0de40aac5d108bc8f82283013e91 (patch)
tree17d2d467f7573588c08c841ca9ac095cf366a821 /drivers/mmc
parent178133e8dcd2f718c832932dda166261d1ee0d53 (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.c9
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;