static int snd_wavefront_pnp_detect(struct pnp_card_link *pcard, const struct pnp_card_device_id *pid) { static int dev; struct snd_card *card; int res; for ( ; dev < SNDRV_CARDS; dev++) { if (enable[dev] && isapnp[dev]) break; } if (dev >= SNDRV_CARDS) return -ENODEV; res = snd_wavefront_card_new(dev, &card); if (res < 0) return res; if (snd_wavefront_pnp (dev, card->private_data, pcard, pid) < 0) { if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) { snd_printk (KERN_ERR "isapnp detection failed\n"); snd_card_free (card); return -ENODEV; } } snd_card_set_dev(card, &pcard->card->dev); if ((res = snd_wavefront_probe(card, dev)) < 0) return res; pnp_set_card_drvdata(pcard, card); dev++; return 0; }
static int __devinit snd_wavefront_nonpnp_probe(struct platform_device *pdev) { int dev = pdev->id; struct snd_card *card; int err; if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) { snd_printk("specify CS4232 port\n"); return -EINVAL; } if (ics2115_port[dev] == SNDRV_AUTO_PORT) { snd_printk("specify ICS2115 port\n"); return -ENODEV; } card = snd_wavefront_card_new(dev); if (! card) return -ENOMEM; snd_card_set_dev(card, &pdev->dev); if ((err = snd_wavefront_probe(card, dev)) < 0) { snd_card_free(card); return err; } platform_set_drvdata(pdev, card); return 0; }
static int snd_wavefront_isa_probe(struct device *pdev, unsigned int dev) { struct snd_card *card; int err; err = snd_wavefront_card_new(dev, &card); if (err < 0) return err; snd_card_set_dev(card, pdev); if ((err = snd_wavefront_probe(card, dev)) < 0) { snd_card_free(card); return err; } dev_set_drvdata(pdev, card); return 0; }