diff options
Diffstat (limited to 'drivers/mtd/mtdcore.c')
| -rw-r--r-- | drivers/mtd/mtdcore.c | 23 | 
1 files changed, 20 insertions, 3 deletions
| diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 2d6423d89a17..9aaeadd53eb4 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -531,6 +531,7 @@ static int mtd_nvmem_reg_read(void *priv, unsigned int offset,  static int mtd_nvmem_add(struct mtd_info *mtd)  { +	struct device_node *node = mtd_get_of_node(mtd);  	struct nvmem_config config = {};  	config.id = -1; @@ -543,7 +544,7 @@ static int mtd_nvmem_add(struct mtd_info *mtd)  	config.stride = 1;  	config.read_only = true;  	config.root_only = true; -	config.no_of_node = true; +	config.no_of_node = !of_device_is_compatible(node, "nvmem-cells");  	config.priv = mtd;  	mtd->nvmem = nvmem_register(&config); @@ -773,6 +774,7 @@ static void mtd_set_dev_defaults(struct mtd_info *mtd)  	INIT_LIST_HEAD(&mtd->partitions);  	mutex_init(&mtd->master.partitions_lock); +	mutex_init(&mtd->master.chrdev_lock);  }  /** @@ -820,6 +822,9 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,  	/* Prefer parsed partitions over driver-provided fallback */  	ret = parse_mtd_partitions(mtd, types, parser_data); +	if (ret == -EPROBE_DEFER) +		goto out; +  	if (ret > 0)  		ret = 0;  	else if (nr_parts) @@ -1884,7 +1889,7 @@ int mtd_read_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len,  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) +			    size_t *retlen, const u_char *buf)  {  	struct mtd_info *master = mtd_get_master(mtd);  	int ret; @@ -1918,6 +1923,18 @@ int mtd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len)  }  EXPORT_SYMBOL_GPL(mtd_lock_user_prot_reg); +int mtd_erase_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len) +{ +	struct mtd_info *master = mtd_get_master(mtd); + +	if (!master->_erase_user_prot_reg) +		return -EOPNOTSUPP; +	if (!len) +		return 0; +	return master->_erase_user_prot_reg(master, from, len); +} +EXPORT_SYMBOL_GPL(mtd_erase_user_prot_reg); +  /* Chip-supported device locking */  int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)  { @@ -2172,7 +2189,7 @@ static int mtd_proc_show(struct seq_file *m, void *v)  /*====================================================================*/  /* Init code */ -static struct backing_dev_info * __init mtd_bdi_init(char *name) +static struct backing_dev_info * __init mtd_bdi_init(const char *name)  {  	struct backing_dev_info *bdi;  	int ret; | 
