dslinux/linux-2.6.x/drivers/mmc mmc_block.c
amadeus
dslinux_amadeus at user.in-berlin.de
Mon Jul 3 22:12:50 CEST 2006
Update of /cvsroot/dslinux/dslinux/linux-2.6.x/drivers/mmc
In directory antilope:/tmp/cvs-serv1407/linux-2.6.x/drivers/mmc
Modified Files:
mmc_block.c
Log Message:
Fix handling of 2GByte SD cards.
Index: mmc_block.c
===================================================================
RCS file: /cvsroot/dslinux/dslinux/linux-2.6.x/drivers/mmc/mmc_block.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- mmc_block.c 20 Feb 2006 16:36:41 -0000 1.2
+++ mmc_block.c 3 Jul 2006 20:12:48 -0000 1.3
@@ -354,7 +354,12 @@
md->block_bits = card->csd.read_blkbits;
blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits);
- set_capacity(md->disk, card->csd.capacity);
+
+ /*
+ * The CSD capacity field is in units of read_blkbits.
+ * set_capacity takes units of 512 bytes.
+ */
+ set_capacity(md->disk, card->csd.capacity << (card->csd.read_blkbits - 9));
}
out:
return md;
@@ -368,7 +373,7 @@
mmc_card_claim_host(card);
cmd.opcode = MMC_SET_BLOCKLEN;
- cmd.arg = 1 << card->csd.read_blkbits;
+ cmd.arg = 1 << md->block_bits;
cmd.flags = MMC_RSP_R1;
err = mmc_wait_for_cmd(card->host, &cmd, 5);
mmc_card_release_host(card);
@@ -407,10 +412,9 @@
if (err)
goto out;
- printk(KERN_INFO "%s: %s %s %dKiB %s\n",
- md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
- (card->csd.capacity << card->csd.read_blkbits) / 1024,
- mmc_card_readonly(card)?"(ro)":"");
+ printk(KERN_INFO "%s: %s %s %luKiB %s\n",
+ md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),
+ get_capacity(md->disk) >> 1, mmc_card_readonly(card)?"(ro)":"");
mmc_set_drvdata(card, md);
add_disk(md->disk);
More information about the dslinux-commit
mailing list