mmc: core: Add in support to expose PRV for v4 MMCs
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>
This commit is contained in:
Родитель
e3e020f8ac
Коммит
51e7e8b632
|
@ -22,6 +22,7 @@ All attributes are read-only.
|
||||||
manfid Manufacturer ID (from CID Register)
|
manfid Manufacturer ID (from CID Register)
|
||||||
name Product Name (from CID Register)
|
name Product Name (from CID Register)
|
||||||
oemid OEM/Application ID (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)
|
serial Product Serial Number (from CID Register)
|
||||||
erase_size Erase group size
|
erase_size Erase group size
|
||||||
preferred_erase_size Preferred erase size
|
preferred_erase_size Preferred erase size
|
||||||
|
|
|
@ -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[3] = UNSTUFF_BITS(resp, 72, 8);
|
||||||
card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
|
card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
|
||||||
card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 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.serial = UNSTUFF_BITS(resp, 16, 32);
|
||||||
card->cid.month = UNSTUFF_BITS(resp, 12, 4);
|
card->cid.month = UNSTUFF_BITS(resp, 12, 4);
|
||||||
card->cid.year = UNSTUFF_BITS(resp, 8, 4) + 1997;
|
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(manfid, "0x%06x\n", card->cid.manfid);
|
||||||
MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
|
MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
|
||||||
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
|
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(serial, "0x%08x\n", card->cid.serial);
|
||||||
MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
|
MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
|
||||||
card->ext_csd.enhanced_area_offset);
|
card->ext_csd.enhanced_area_offset);
|
||||||
|
@ -645,6 +647,7 @@ static struct attribute *mmc_std_attrs[] = {
|
||||||
&dev_attr_manfid.attr,
|
&dev_attr_manfid.attr,
|
||||||
&dev_attr_name.attr,
|
&dev_attr_name.attr,
|
||||||
&dev_attr_oemid.attr,
|
&dev_attr_oemid.attr,
|
||||||
|
&dev_attr_prv.attr,
|
||||||
&dev_attr_serial.attr,
|
&dev_attr_serial.attr,
|
||||||
&dev_attr_enhanced_area_offset.attr,
|
&dev_attr_enhanced_area_offset.attr,
|
||||||
&dev_attr_enhanced_area_size.attr,
|
&dev_attr_enhanced_area_size.attr,
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
struct mmc_cid {
|
struct mmc_cid {
|
||||||
unsigned int manfid;
|
unsigned int manfid;
|
||||||
char prod_name[8];
|
char prod_name[8];
|
||||||
|
unsigned char prv;
|
||||||
unsigned int serial;
|
unsigned int serial;
|
||||||
unsigned short oemid;
|
unsigned short oemid;
|
||||||
unsigned short year;
|
unsigned short year;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче