aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/card
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/card')
-rw-r--r--drivers/mmc/card/block.c23
1 files changed, 5 insertions, 18 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index d73cac84d9f2..1d1e469e08ea 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -57,7 +57,6 @@ struct mmc_blk_data {
57 struct mmc_queue queue; 57 struct mmc_queue queue;
58 58
59 unsigned int usage; 59 unsigned int usage;
60 unsigned int block_bits;
61 unsigned int read_only; 60 unsigned int read_only;
62}; 61};
63 62
@@ -231,11 +230,11 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
231 if (!mmc_card_blockaddr(card)) 230 if (!mmc_card_blockaddr(card))
232 brq.cmd.arg <<= 9; 231 brq.cmd.arg <<= 9;
233 brq.cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC; 232 brq.cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
234 brq.data.blksz = 1 << md->block_bits; 233 brq.data.blksz = 512;
235 brq.stop.opcode = MMC_STOP_TRANSMISSION; 234 brq.stop.opcode = MMC_STOP_TRANSMISSION;
236 brq.stop.arg = 0; 235 brq.stop.arg = 0;
237 brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC; 236 brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
238 brq.data.blocks = req->nr_sectors >> (md->block_bits - 9); 237 brq.data.blocks = req->nr_sectors;
239 238
240 if (brq.data.blocks > 1) { 239 if (brq.data.blocks > 1) {
241 /* SPI multiblock writes terminate using a special 240 /* SPI multiblock writes terminate using a special
@@ -351,16 +350,11 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
351 if (rq_data_dir(req) != READ) { 350 if (rq_data_dir(req) != READ) {
352 if (mmc_card_sd(card)) { 351 if (mmc_card_sd(card)) {
353 u32 blocks; 352 u32 blocks;
354 unsigned int bytes;
355 353
356 blocks = mmc_sd_num_wr_blocks(card); 354 blocks = mmc_sd_num_wr_blocks(card);
357 if (blocks != (u32)-1) { 355 if (blocks != (u32)-1) {
358 if (card->csd.write_partial)
359 bytes = blocks << md->block_bits;
360 else
361 bytes = blocks << 9;
362 spin_lock_irq(&md->lock); 356 spin_lock_irq(&md->lock);
363 ret = __blk_end_request(req, 0, bytes); 357 ret = __blk_end_request(req, 0, blocks << 9);
364 spin_unlock_irq(&md->lock); 358 spin_unlock_irq(&md->lock);
365 } 359 }
366 } else { 360 } else {
@@ -410,13 +404,6 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
410 */ 404 */
411 md->read_only = mmc_blk_readonly(card); 405 md->read_only = mmc_blk_readonly(card);
412 406
413 /*
414 * Both SD and MMC specifications state (although a bit
415 * unclearly in the MMC case) that a block size of 512
416 * bytes must always be supported by the card.
417 */
418 md->block_bits = 9;
419
420 md->disk = alloc_disk(1 << MMC_SHIFT); 407 md->disk = alloc_disk(1 << MMC_SHIFT);
421 if (md->disk == NULL) { 408 if (md->disk == NULL) {
422 ret = -ENOMEM; 409 ret = -ENOMEM;
@@ -454,7 +441,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
454 441
455 sprintf(md->disk->disk_name, "mmcblk%d", devidx); 442 sprintf(md->disk->disk_name, "mmcblk%d", devidx);
456 443
457 blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits); 444 blk_queue_hardsect_size(md->queue.queue, 512);
458 445
459 if (!mmc_card_sd(card) && mmc_card_blockaddr(card)) { 446 if (!mmc_card_sd(card) && mmc_card_blockaddr(card)) {
460 /* 447 /*
@@ -492,7 +479,7 @@ mmc_blk_set_blksize(struct mmc_blk_data *md, struct mmc_card *card)
492 479
493 mmc_claim_host(card->host); 480 mmc_claim_host(card->host);
494 cmd.opcode = MMC_SET_BLOCKLEN; 481 cmd.opcode = MMC_SET_BLOCKLEN;
495 cmd.arg = 1 << md->block_bits; 482 cmd.arg = 512;
496 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC; 483 cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
497 err = mmc_wait_for_cmd(card->host, &cmd, 5); 484 err = mmc_wait_for_cmd(card->host, &cmd, 5);
498 mmc_release_host(card->host); 485 mmc_release_host(card->host);