]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/mtd/mtdcore.c
Merge tag '9p-for-5.4' of git://github.com/martinetd/linux
[linux.git] / drivers / mtd / mtdcore.c
index 408615f29e57608c356e69a2cc703f997ec6866c..6cc7ecb0c7881ba160a3d000ddef3ed2836dde1f 100644 (file)
@@ -335,6 +335,82 @@ static const struct device_type mtd_devtype = {
        .release        = mtd_release,
 };
 
+static int mtd_partid_show(struct seq_file *s, void *p)
+{
+       struct mtd_info *mtd = s->private;
+
+       seq_printf(s, "%s\n", mtd->dbg.partid);
+
+       return 0;
+}
+
+static int mtd_partid_debugfs_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, mtd_partid_show, inode->i_private);
+}
+
+static const struct file_operations mtd_partid_debug_fops = {
+       .open           = mtd_partid_debugfs_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static int mtd_partname_show(struct seq_file *s, void *p)
+{
+       struct mtd_info *mtd = s->private;
+
+       seq_printf(s, "%s\n", mtd->dbg.partname);
+
+       return 0;
+}
+
+static int mtd_partname_debugfs_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, mtd_partname_show, inode->i_private);
+}
+
+static const struct file_operations mtd_partname_debug_fops = {
+       .open           = mtd_partname_debugfs_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static struct dentry *dfs_dir_mtd;
+
+static void mtd_debugfs_populate(struct mtd_info *mtd)
+{
+       struct device *dev = &mtd->dev;
+       struct dentry *root, *dent;
+
+       if (IS_ERR_OR_NULL(dfs_dir_mtd))
+               return;
+
+       root = debugfs_create_dir(dev_name(dev), dfs_dir_mtd);
+       if (IS_ERR_OR_NULL(root)) {
+               dev_dbg(dev, "won't show data in debugfs\n");
+               return;
+       }
+
+       mtd->dbg.dfs_dir = root;
+
+       if (mtd->dbg.partid) {
+               dent = debugfs_create_file("partid", 0400, root, mtd,
+                                          &mtd_partid_debug_fops);
+               if (IS_ERR_OR_NULL(dent))
+                       dev_err(dev, "can't create debugfs entry for partid\n");
+       }
+
+       if (mtd->dbg.partname) {
+               dent = debugfs_create_file("partname", 0400, root, mtd,
+                                          &mtd_partname_debug_fops);
+               if (IS_ERR_OR_NULL(dent))
+                       dev_err(dev,
+                               "can't create debugfs entry for partname\n");
+       }
+}
+
 #ifndef CONFIG_MMU
 unsigned mtd_mmap_capabilities(struct mtd_info *mtd)
 {
@@ -512,8 +588,6 @@ static int mtd_nvmem_add(struct mtd_info *mtd)
        return 0;
 }
 
-static struct dentry *dfs_dir_mtd;
-
 /**
  *     add_mtd_device - register an MTD device
  *     @mtd: pointer to new MTD device info structure
@@ -607,13 +681,7 @@ int add_mtd_device(struct mtd_info *mtd)
        if (error)
                goto fail_nvmem_add;
 
-       if (!IS_ERR_OR_NULL(dfs_dir_mtd)) {
-               mtd->dbg.dfs_dir = debugfs_create_dir(dev_name(&mtd->dev), dfs_dir_mtd);
-               if (IS_ERR_OR_NULL(mtd->dbg.dfs_dir)) {
-                       pr_debug("mtd device %s won't show data in debugfs\n",
-                                dev_name(&mtd->dev));
-               }
-       }
+       mtd_debugfs_populate(mtd);
 
        device_create(&mtd_class, mtd->dev.parent, MTD_DEVT(i) + 1, NULL,
                      "mtd%dro", i);