Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51e7e8b6 authored by Bernie Thompson's avatar Bernie Thompson Committed by Chris Ball
Browse files

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: default avatarBernie Thompson <bhthompson@chromium.org>
Reviewed-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent e3e020f8
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+3 −0
Original line number Original line Diff line number Diff line
@@ -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,
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;