mmc: core: Add in support to expose PRV for v4 MMCs
authorBernie Thompson <bhthompson@chromium.org>
Wed, 27 Feb 2013 20:19:17 +0000 (12:19 -0800)
committerChris Ball <cjb@laptop.org>
Fri, 22 Mar 2013 16:10:42 +0000 (12:10 -0400)
The JEDEC MMC v4 spec defines a new PRV value in place of the original
fwrev and hwrev specified in v1. We can expose this in the kernel to enable
user space to more easily determine the product revision of a given MMC.

Signed-off-by: Bernie Thompson <bhthompson@chromium.org>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
Documentation/mmc/mmc-dev-attrs.txt
drivers/mmc/core/mmc.c
include/linux/mmc/card.h

index 0d98fac8893b5ea1806781e8cef2fec4c654c805..189bab09255a929089ffd031d10c71386964b69e 100644 (file)
@@ -22,6 +22,7 @@ All attributes are read-only.
        manfid                  Manufacturer ID (from CID Register)
        name                    Product Name (from CID Register)
        oemid                   OEM/Application ID (from CID Register)
+       prv                     Product Revision (from CID Register) (SD and MMCv4 only)
        serial                  Product Serial Number (from CID Register)
        erase_size              Erase group size
        preferred_erase_size    Preferred erase size
index c8f3d6e0684e6d7be348cec60e373287afdb1a21..d584f7ca168c606e88f7b979d3cc70c0bb1a9a53 100644 (file)
@@ -96,6 +96,7 @@ static int mmc_decode_cid(struct mmc_card *card)
                card->cid.prod_name[3]  = UNSTUFF_BITS(resp, 72, 8);
                card->cid.prod_name[4]  = UNSTUFF_BITS(resp, 64, 8);
                card->cid.prod_name[5]  = UNSTUFF_BITS(resp, 56, 8);
+               card->cid.prv           = UNSTUFF_BITS(resp, 48, 8);
                card->cid.serial        = UNSTUFF_BITS(resp, 16, 32);
                card->cid.month         = UNSTUFF_BITS(resp, 12, 4);
                card->cid.year          = UNSTUFF_BITS(resp, 8, 4) + 1997;
@@ -627,6 +628,7 @@ MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
 MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
 MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
 MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
+MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv);
 MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
 MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
                card->ext_csd.enhanced_area_offset);
@@ -645,6 +647,7 @@ static struct attribute *mmc_std_attrs[] = {
        &dev_attr_manfid.attr,
        &dev_attr_name.attr,
        &dev_attr_oemid.attr,
+       &dev_attr_prv.attr,
        &dev_attr_serial.attr,
        &dev_attr_enhanced_area_offset.attr,
        &dev_attr_enhanced_area_size.attr,
index 61b2c30c903b8571c5866bec8b100b37567c3d36..f31725ba49f3d9b02567d324c03ddd733286b8df 100644 (file)
@@ -17,6 +17,7 @@
 struct mmc_cid {
        unsigned int            manfid;
        char                    prod_name[8];
+       unsigned char           prv;
        unsigned int            serial;
        unsigned short          oemid;
        unsigned short          year;