- int ret;
- unsigned i;
- struct snd_card *card;
-
- for (i = 0; i < SNDRV_CARDS; ++i) {
- /*
- * We do NOT probe for ports.
- * If we're not given a port number for this
- * card then we completely ignore this line
- * of parameters.
- */
- if (port[i] == SNDRV_AUTO_PORT)
- continue;
-
- /*
- * Make sure we were given ALL of the other parameters.
- */
- if ( (irq[i] == SNDRV_AUTO_IRQ) ||
- (mpu_irq[i] == SNDRV_AUTO_IRQ) ||
- (dma[i] == SNDRV_AUTO_DMA) ) {
- printk(KERN_INFO
- "sscape: insufficient parameters, need IO, IRQ, MPU-IRQ and DMA\n");
- return -ENXIO;
- }
-
- /*
- * This cards looks OK ...
- */
- init_params(params, index[i], id[i], port[i], irq[i], mpu_irq[i], dma[i]);
-
- ret = create_sscape(params, &card);
- if (ret < 0)
- return ret;
-
- if ((ret = snd_card_set_generic_dev(card)) < 0) {
- snd_card_free(card);
- return ret;
- }
- if ((ret = snd_card_register(card)) < 0) {
- printk(KERN_ERR "sscape: Failed to register sound card\n");
- snd_card_free(card);
- return ret;
- }
-
- sscape_card[sscape_cards] = card;
- params++;
- sscape_cards++;
- } /* for */
-
- return 0;
-}