diff options
Diffstat (limited to 'drivers/mtd/mtdcore.c')
| -rw-r--r-- | drivers/mtd/mtdcore.c | 37 | 
1 files changed, 21 insertions, 16 deletions
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 5e14d540ba2..d201feeb3ca 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -157,6 +157,9 @@ static ssize_t mtd_type_show(struct device *dev,  	case MTD_UBIVOLUME:  		type = "ubi";  		break; +	case MTD_MLCNANDFLASH: +		type = "mlc-nand"; +		break;  	default:  		type = "unknown";  	} @@ -310,15 +313,7 @@ static struct attribute *mtd_attrs[] = {  	&dev_attr_bitflip_threshold.attr,  	NULL,  }; - -static struct attribute_group mtd_group = { -	.attrs		= mtd_attrs, -}; - -static const struct attribute_group *mtd_groups[] = { -	&mtd_group, -	NULL, -}; +ATTRIBUTE_GROUPS(mtd);  static struct device_type mtd_devtype = {  	.name		= "mtd", @@ -888,14 +883,14 @@ EXPORT_SYMBOL_GPL(mtd_read_oob);   * devices. The user data is one time programmable but the factory data is read   * only.   */ -int mtd_get_fact_prot_info(struct mtd_info *mtd, struct otp_info *buf, -			   size_t len) +int mtd_get_fact_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, +			   struct otp_info *buf)  {  	if (!mtd->_get_fact_prot_info)  		return -EOPNOTSUPP;  	if (!len)  		return 0; -	return mtd->_get_fact_prot_info(mtd, buf, len); +	return mtd->_get_fact_prot_info(mtd, len, retlen, buf);  }  EXPORT_SYMBOL_GPL(mtd_get_fact_prot_info); @@ -911,14 +906,14 @@ int mtd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, size_t len,  }  EXPORT_SYMBOL_GPL(mtd_read_fact_prot_reg); -int mtd_get_user_prot_info(struct mtd_info *mtd, struct otp_info *buf, -			   size_t len) +int mtd_get_user_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, +			   struct otp_info *buf)  {  	if (!mtd->_get_user_prot_info)  		return -EOPNOTSUPP;  	if (!len)  		return 0; -	return mtd->_get_user_prot_info(mtd, buf, len); +	return mtd->_get_user_prot_info(mtd, len, retlen, buf);  }  EXPORT_SYMBOL_GPL(mtd_get_user_prot_info); @@ -937,12 +932,22 @@ EXPORT_SYMBOL_GPL(mtd_read_user_prot_reg);  int mtd_write_user_prot_reg(struct mtd_info *mtd, loff_t to, size_t len,  			    size_t *retlen, u_char *buf)  { +	int ret; +  	*retlen = 0;  	if (!mtd->_write_user_prot_reg)  		return -EOPNOTSUPP;  	if (!len)  		return 0; -	return mtd->_write_user_prot_reg(mtd, to, len, retlen, buf); +	ret = mtd->_write_user_prot_reg(mtd, to, len, retlen, buf); +	if (ret) +		return ret; + +	/* +	 * If no data could be written at all, we are out of memory and +	 * must return -ENOSPC. +	 */ +	return (*retlen) ? 0 : -ENOSPC;  }  EXPORT_SYMBOL_GPL(mtd_write_user_prot_reg);  | 
