summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary King <gking@nvidia.com>2009-12-07 18:39:21 -0800
committerGary King <gking@nvidia.com>2009-12-08 13:52:46 -0800
commit7b5c7f98990e8d943803933df5e8081dbc740b5b (patch)
treebd197ad53d2dc2f07e0c0c321a0f355ff949d02a
parent886eaf043fb40bdb2ae023bd748a137cfdf4205b (diff)
mmc: add detection for MMC 4.4 boot sectors
properly unpacks the boot sector extension in MMC 4.4 CID responses
-rw-r--r--drivers/mmc/core/mmc.c3
-rw-r--r--include/linux/mmc/card.h2
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index c49b21decbf1..a5f27fff8962 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -86,7 +86,8 @@ static int mmc_decode_cid(struct mmc_card *card)
case 3: /* MMC v3.1 - v3.3 */
case 4: /* MMC v4 */
card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
- card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
+ card->cid.cbx = UNSTUFF_BITS(resp, 112, 2);
+ card->cid.oemid = UNSTUFF_BITS(resp, 104, 8);
card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 403aa505f27e..10d414060c6c 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -16,6 +16,7 @@ struct mmc_cid {
unsigned int manfid;
char prod_name[8];
unsigned int serial;
+ unsigned char cbx:2;
unsigned short oemid;
unsigned short year;
unsigned char hwrev;
@@ -118,6 +119,7 @@ struct mmc_card {
#define mmc_card_mmc(c) ((c)->type == MMC_TYPE_MMC)
#define mmc_card_sd(c) ((c)->type == MMC_TYPE_SD)
#define mmc_card_sdio(c) ((c)->type == MMC_TYPE_SDIO)
+#define mmc_card_has_boot(c) ((c)->cid.cbx != 0)
#define mmc_card_present(c) ((c)->state & MMC_STATE_PRESENT)
#define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY)