diff options
Diffstat (limited to 'drivers/mmc/core/sd.c')
| -rw-r--r-- | drivers/mmc/core/sd.c | 38 | 
1 files changed, 34 insertions, 4 deletions
| diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index 5a2210c25aa7..6f054c449d46 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c @@ -709,10 +709,34 @@ static DEVICE_ATTR(dsr, S_IRUGO, mmc_dsr_show, NULL);  MMC_DEV_ATTR(vendor, "0x%04x\n", card->cis.vendor);  MMC_DEV_ATTR(device, "0x%04x\n", card->cis.device); +MMC_DEV_ATTR(revision, "%u.%u\n", card->major_rev, card->minor_rev); + +#define sdio_info_attr(num)									\ +static ssize_t info##num##_show(struct device *dev, struct device_attribute *attr, char *buf)	\ +{												\ +	struct mmc_card *card = mmc_dev_to_card(dev);						\ +												\ +	if (num > card->num_info)								\ +		return -ENODATA;								\ +	if (!card->info[num-1][0])								\ +		return 0;									\ +	return sprintf(buf, "%s\n", card->info[num-1]);						\ +}												\ +static DEVICE_ATTR_RO(info##num) + +sdio_info_attr(1); +sdio_info_attr(2); +sdio_info_attr(3); +sdio_info_attr(4);  static struct attribute *sd_std_attrs[] = {  	&dev_attr_vendor.attr,  	&dev_attr_device.attr, +	&dev_attr_revision.attr, +	&dev_attr_info1.attr, +	&dev_attr_info2.attr, +	&dev_attr_info3.attr, +	&dev_attr_info4.attr,  	&dev_attr_cid.attr,  	&dev_attr_csd.attr,  	&dev_attr_scr.attr, @@ -735,12 +759,18 @@ static struct attribute *sd_std_attrs[] = {  static umode_t sd_std_is_visible(struct kobject *kobj, struct attribute *attr,  				 int index)  { -	struct device *dev = container_of(kobj, struct device, kobj); +	struct device *dev = kobj_to_dev(kobj);  	struct mmc_card *card = mmc_dev_to_card(dev); -	/* CIS vendor and device ids are available only for Combo cards */ -	if ((attr == &dev_attr_vendor.attr || attr == &dev_attr_device.attr) && -	    card->type != MMC_TYPE_SD_COMBO) +	/* CIS vendor and device ids, revision and info string are available only for Combo cards */ +	if ((attr == &dev_attr_vendor.attr || +	     attr == &dev_attr_device.attr || +	     attr == &dev_attr_revision.attr || +	     attr == &dev_attr_info1.attr || +	     attr == &dev_attr_info2.attr || +	     attr == &dev_attr_info3.attr || +	     attr == &dev_attr_info4.attr +	    ) && card->type != MMC_TYPE_SD_COMBO)  		return 0;  	return attr->mode; |