OSDN Git Service

ALSA: ice1724: Remove superfluous loop over model table
authorTakashi Iwai <tiwai@suse.de>
Mon, 12 Jul 2021 09:19:04 +0000 (11:19 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Jul 2021 11:13:15 +0000 (13:13 +0200)
The ice1724 driver looks for the matching card_info entry twice, once
at reading EEPROM and another for the rest tasks in the probe call.
Reduce the second one by referring to the already assigned card_info
entry.

Link: https://lore.kernel.org/r/20210712091904.28022-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/ice1724.c

index ef2367d..8052d7c 100644 (file)
@@ -2151,13 +2151,6 @@ static const struct snd_kcontrol_new snd_vt1724_mixer_pro_peak = {
 };
 
 /*
- *
- */
-
-static const struct snd_ice1712_card_info no_matched;
-
-
-/*
   ooAoo cards with no controls
 */
 static const unsigned char ooaoo_sq210_eeprom[] = {
@@ -2574,7 +2567,7 @@ static int snd_vt1724_probe(struct pci_dev *pci,
        struct snd_card *card;
        struct snd_ice1712 *ice;
        int pcm_dev = 0, err;
-       const struct snd_ice1712_card_info * const *tbl, *c;
+       const struct snd_ice1712_card_info *c;
 
        if (dev >= SNDRV_CARDS)
                return -ENODEV;
@@ -2600,27 +2593,20 @@ static int snd_vt1724_probe(struct pci_dev *pci,
        /* field init before calling chip_init */
        ice->ext_clock_count = 0;
 
-       for (tbl = card_tables; *tbl; tbl++) {
-               for (c = *tbl; c->name; c++) {
-                       if ((model[dev] && c->model &&
-                            !strcmp(model[dev], c->model)) ||
-                           (c->subvendor == ice->eeprom.subvendor)) {
-                               strcpy(card->shortname, c->name);
-                               if (c->driver) /* specific driver? */
-                                       strcpy(card->driver, c->driver);
-                               if (c->chip_init) {
-                                       err = c->chip_init(ice);
-                                       if (err < 0) {
-                                               snd_card_free(card);
-                                               return err;
-                                       }
-                               }
-                               goto __found;
+       c = ice->card_info;
+       if (c) {
+               strcpy(card->shortname, c->name);
+               if (c->driver) /* specific driver? */
+                       strcpy(card->driver, c->driver);
+               if (c->chip_init) {
+                       err = c->chip_init(ice);
+                       if (err < 0) {
+                               snd_card_free(card);
+                               return err;
                        }
                }
        }
-       c = &no_matched;
-__found:
+
        /*
        * VT1724 has separate DMAs for the analog and the SPDIF streams while
        * ICE1712 has only one for both (mixed up).
@@ -2688,7 +2674,7 @@ __found:
                }
        }
 
-       if (c->build_controls) {
+       if (c && c->build_controls) {
                err = c->build_controls(ice);
                if (err < 0) {
                        snd_card_free(card);
@@ -2696,7 +2682,7 @@ __found:
                }
        }
 
-       if (!c->no_mpu401) {
+       if (!c || !c->no_mpu401) {
                if (ice->eeprom.data[ICE_EEP2_SYSCONF] & VT1724_CFG_MPU401) {
                        struct snd_rawmidi *rmidi;