entry = snd_info_create_card_entry(card, "spos_symbols",
                                           ins->proc_dsp_dir);
-       if (entry) {
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_symbol_table_read;
-       }
-       ins->proc_sym_info_entry = entry;
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_symbol_table_read);
     
-       if ((entry = snd_info_create_card_entry(card, "spos_modules", ins->proc_dsp_dir)) != NULL) {
-               entry->content = SNDRV_INFO_CONTENT_TEXT;
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_modules_read;
-       }
-       ins->proc_modules_info_entry = entry;
+       entry = snd_info_create_card_entry(card, "spos_modules",
+                                          ins->proc_dsp_dir);
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_modules_read);
 
-       if ((entry = snd_info_create_card_entry(card, "parameter", ins->proc_dsp_dir)) != NULL) {
-               entry->content = SNDRV_INFO_CONTENT_TEXT;
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_parameter_dump_read;
-       }
-       ins->proc_parameter_dump_info_entry = entry;
+       entry = snd_info_create_card_entry(card, "parameter",
+                                          ins->proc_dsp_dir);
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_parameter_dump_read);
 
-       if ((entry = snd_info_create_card_entry(card, "sample", ins->proc_dsp_dir)) != NULL) {
-               entry->content = SNDRV_INFO_CONTENT_TEXT;
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_sample_dump_read;
-       }
-       ins->proc_sample_dump_info_entry = entry;
+       entry = snd_info_create_card_entry(card, "sample",
+                                          ins->proc_dsp_dir);
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_sample_dump_read);
 
-       if ((entry = snd_info_create_card_entry(card, "task_tree", ins->proc_dsp_dir)) != NULL) {
-               entry->content = SNDRV_INFO_CONTENT_TEXT;
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_task_tree_read;
-       }
-       ins->proc_task_info_entry = entry;
+       entry = snd_info_create_card_entry(card, "task_tree",
+                                          ins->proc_dsp_dir);
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_task_tree_read);
 
-       if ((entry = snd_info_create_card_entry(card, "scb_info", ins->proc_dsp_dir)) != NULL) {
-               entry->content = SNDRV_INFO_CONTENT_TEXT;
-               entry->private_data = chip;
-               entry->mode = S_IFREG | 0644;
-               entry->c.text.read = cs46xx_dsp_proc_scb_read;
-       }
-       ins->proc_scb_info_entry = entry;
+       entry = snd_info_create_card_entry(card, "scb_info",
+                                          ins->proc_dsp_dir);
+       if (entry)
+               snd_info_set_text_ops(entry, chip,
+                                     cs46xx_dsp_proc_scb_read);
 
        mutex_lock(&chip->spos_mutex);
        /* register/update SCB's entries on proc */
        if (!ins)
                return 0;
 
-       snd_info_free_entry(ins->proc_sym_info_entry);
-       ins->proc_sym_info_entry = NULL;
-
-       snd_info_free_entry(ins->proc_modules_info_entry);
-       ins->proc_modules_info_entry = NULL;
-
-       snd_info_free_entry(ins->proc_parameter_dump_info_entry);
-       ins->proc_parameter_dump_info_entry = NULL;
-
-       snd_info_free_entry(ins->proc_sample_dump_info_entry);
-       ins->proc_sample_dump_info_entry = NULL;
-
-       snd_info_free_entry(ins->proc_scb_info_entry);
-       ins->proc_scb_info_entry = NULL;
-
-       snd_info_free_entry(ins->proc_task_info_entry);
-       ins->proc_task_info_entry = NULL;
-
        mutex_lock(&chip->spos_mutex);
        for (i = 0; i < ins->nscb; ++i) {
                if (ins->scbs[i].deleted) continue;
 
        if (ins->snd_card != NULL && ins->proc_dsp_dir != NULL &&
            scb->proc_info == NULL) {
   
-               if ((entry = snd_info_create_card_entry(ins->snd_card, scb->scb_name, 
-                                                       ins->proc_dsp_dir)) != NULL) {
+               entry = snd_info_create_card_entry(ins->snd_card, scb->scb_name,
+                                                  ins->proc_dsp_dir);
+               if (entry) {
                        scb_info = kmalloc(sizeof(struct proc_scb_info), GFP_KERNEL);
                        if (!scb_info) {
                                snd_info_free_entry(entry);
 
                        scb_info->chip = chip;
                        scb_info->scb_desc = scb;
-      
-                       entry->content = SNDRV_INFO_CONTENT_TEXT;
-                       entry->private_data = scb_info;
-                       entry->mode = S_IFREG | 0644;
-      
-                       entry->c.text.read = cs46xx_dsp_proc_scb_info_read;
+                       snd_info_set_text_ops(entry, scb_info,
+                                             cs46xx_dsp_proc_scb_info_read);
                }
 out:
                scb->proc_info = entry;