return 0;
 }
 
+static void snd_card_id_read(struct snd_info_entry *entry,
+                            struct snd_info_buffer *buffer)
+{
+       struct snd_card *card = entry->private_data;
+
+       snd_iprintf(buffer, "%s\n", card->id);
+}
+
 /*
  * create a card proc file
  * called from init.c
        if (!entry)
                return -ENOMEM;
        card->proc_root = entry;
-       return 0;
+
+       return snd_card_ro_proc_new(card, "id", card, snd_card_id_read);
 }
 
 /*
 
 EXPORT_SYMBOL(snd_mixer_oss_notify_callback);
 #endif
 
-#ifdef CONFIG_SND_PROC_FS
-static void snd_card_id_read(struct snd_info_entry *entry,
-                            struct snd_info_buffer *buffer)
-{
-       struct snd_card *card = entry->private_data;
-
-       snd_iprintf(buffer, "%s\n", card->id);
-}
-
-static int init_info_for_card(struct snd_card *card)
-{
-       struct snd_info_entry *entry;
-
-       entry = snd_info_create_card_entry(card, "id", card->proc_root);
-       if (!entry) {
-               dev_dbg(card->dev, "unable to create card entry\n");
-               return -ENOMEM;
-       }
-       snd_info_set_text_ops(entry, card, snd_card_id_read);
-       card->proc_id = entry;
-
-       return snd_info_card_register(card);
-}
-#else /* !CONFIG_SND_PROC_FS */
-#define init_info_for_card(card)
-#endif
-
 static int check_empty_slot(struct module *module, int slot)
 {
        return !slots[slot] || !*slots[slot];
        snd_device_free_all(card);
        if (card->private_free)
                card->private_free(card);
-       snd_info_free_entry(card->proc_id);
        if (snd_info_card_free(card) < 0) {
                dev_warn(card->dev, "unable to free card info\n");
                /* Not fatal error */
        }
        snd_cards[card->number] = card;
        mutex_unlock(&snd_card_mutex);
-       init_info_for_card(card);
+       err = snd_info_card_register(card);
+       if (err < 0)
+               return err;
+
 #if IS_ENABLED(CONFIG_SND_MIXER_OSS)
        if (snd_mixer_oss_notify_callback)
                snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_REGISTER);