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