}
 
 static int
-mtk_ppe_debugfs_foe_show_all(struct seq_file *m, void *private)
+mtk_ppe_debugfs_foe_all_show(struct seq_file *m, void *private)
 {
        return mtk_ppe_debugfs_foe_show(m, private, false);
 }
+DEFINE_SHOW_ATTRIBUTE(mtk_ppe_debugfs_foe_all);
 
 static int
-mtk_ppe_debugfs_foe_show_bind(struct seq_file *m, void *private)
+mtk_ppe_debugfs_foe_bind_show(struct seq_file *m, void *private)
 {
        return mtk_ppe_debugfs_foe_show(m, private, true);
 }
-
-static int
-mtk_ppe_debugfs_foe_open_all(struct inode *inode, struct file *file)
-{
-       return single_open(file, mtk_ppe_debugfs_foe_show_all,
-                          inode->i_private);
-}
-
-static int
-mtk_ppe_debugfs_foe_open_bind(struct inode *inode, struct file *file)
-{
-       return single_open(file, mtk_ppe_debugfs_foe_show_bind,
-                          inode->i_private);
-}
+DEFINE_SHOW_ATTRIBUTE(mtk_ppe_debugfs_foe_bind);
 
 int mtk_ppe_debugfs_init(struct mtk_ppe *ppe, int index)
 {
-       static const struct file_operations fops_all = {
-               .open = mtk_ppe_debugfs_foe_open_all,
-               .read = seq_read,
-               .llseek = seq_lseek,
-               .release = single_release,
-       };
-       static const struct file_operations fops_bind = {
-               .open = mtk_ppe_debugfs_foe_open_bind,
-               .read = seq_read,
-               .llseek = seq_lseek,
-               .release = single_release,
-       };
        struct dentry *root;
 
        snprintf(ppe->dirname, sizeof(ppe->dirname), "ppe%d", index);
 
        root = debugfs_create_dir(ppe->dirname, NULL);
-       debugfs_create_file("entries", S_IRUGO, root, ppe, &fops_all);
-       debugfs_create_file("bind", S_IRUGO, root, ppe, &fops_bind);
+       debugfs_create_file("entries", S_IRUGO, root, ppe, &mtk_ppe_debugfs_foe_all_fops);
+       debugfs_create_file("bind", S_IRUGO, root, ppe, &mtk_ppe_debugfs_foe_bind_fops);
 
        return 0;
 }