RDMA/mlx5: Verify that DM operation is reasonable
[linux-2.6-microblaze.git] / drivers / mtd / mtdcore.c
index 2d6423d..9aaeadd 100644 (file)
@@ -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;