static int __devinit snd_sgalaxy_probe(struct device *devptr, unsigned int dev) { static int possible_irqs[] = {7, 9, 10, 11, -1}; static int possible_dmas[] = {1, 3, 0, -1}; int err, xirq, xdma1; struct snd_card *card; struct snd_wss *chip; err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); if (err < 0) return err; xirq = irq[dev]; if (xirq == SNDRV_AUTO_IRQ) { if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); err = -EBUSY; goto _err; } } xdma1 = dma1[dev]; if (xdma1 == SNDRV_AUTO_DMA) { if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { snd_printk(KERN_ERR PFX "unable to find a free DMA\n"); err = -EBUSY; goto _err; } } if ((err = snd_sgalaxy_detect(dev, xirq, xdma1)) < 0) goto _err; err = snd_wss_create(card, wssport[dev] + 4, -1, xirq, xdma1, -1, WSS_HW_DETECT, 0, &chip); if (err < 0) goto _err; card->private_data = chip; err = snd_wss_pcm(chip, 0, NULL); if (err < 0) { snd_printdd(PFX "error creating new WSS PCM device\n"); goto _err; } err = snd_wss_mixer(chip); if (err < 0) { snd_printdd(PFX "error creating new WSS mixer\n"); goto _err; } if ((err = snd_sgalaxy_mixer(chip)) < 0) { snd_printdd(PFX "the mixer rewrite failed\n"); goto _err; } strcpy(card->driver, "Sound Galaxy"); strcpy(card->shortname, "Sound Galaxy"); sprintf(card->longname, "Sound Galaxy at 0x%lx, irq %d, dma %d", wssport[dev], xirq, xdma1); snd_card_set_dev(card, devptr); if ((err = snd_card_register(card)) < 0) goto _err; dev_set_drvdata(devptr, card); return 0; _err: snd_card_free(card); return err; }
static int __init snd_sgalaxy_probe(int dev) { static int possible_irqs[] = {7, 9, 10, 11, -1}; static int possible_dmas[] = {1, 3, 0, -1}; int err, xirq, xdma1; snd_card_t *card; ad1848_t *chip; if (sbport[dev] == SNDRV_AUTO_PORT) { snd_printk("specify SB port\n"); return -EINVAL; } if (wssport[dev] == SNDRV_AUTO_PORT) { snd_printk("specify WSS port\n"); return -EINVAL; } card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); if (card == NULL) return -ENOMEM; xirq = irq[dev]; if (xirq == SNDRV_AUTO_IRQ) { if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { snd_card_free(card); snd_printk("unable to find a free IRQ\n"); return -EBUSY; } } xdma1 = dma1[dev]; if (xdma1 == SNDRV_AUTO_DMA) { if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { snd_card_free(card); snd_printk("unable to find a free DMA\n"); return -EBUSY; } } if ((err = snd_sgalaxy_detect(dev, xirq, xdma1)) < 0) { snd_card_free(card); return err; } if ((err = snd_ad1848_create(card, wssport[dev] + 4, xirq, xdma1, AD1848_HW_DETECT, &chip)) < 0) { snd_card_free(card); return err; } if ((err = snd_ad1848_pcm(chip, 0, NULL)) < 0) { snd_printdd("sgalaxy - error creating new ad1848 PCM device\n"); snd_card_free(card); return err; } if ((err = snd_ad1848_mixer(chip)) < 0) { snd_printdd("sgalaxy - error creating new ad1848 mixer\n"); snd_card_free(card); return err; } if (snd_sgalaxy_mixer(chip) < 0) { snd_printdd("sgalaxy - the mixer rewrite failed\n"); snd_card_free(card); return err; } strcpy(card->driver, "Sound Galaxy"); strcpy(card->shortname, "Sound Galaxy"); sprintf(card->longname, "Sound Galaxy at 0x%lx, irq %d, dma %d", wssport[dev], xirq, xdma1); if ((err = snd_card_register(card)) < 0) { snd_card_free(card); return err; } snd_sgalaxy_cards[dev] = card; return 0; }
static int __init snd_sgalaxy_probe(struct platform_device *devptr) { int dev = devptr->id; static int possible_irqs[] = {7, 9, 10, 11, -1}; static int possible_dmas[] = {1, 3, 0, -1}; int err, xirq, xdma1; struct snd_card *card; struct snd_ad1848 *chip; if (sbport[dev] == SNDRV_AUTO_PORT) { snd_printk(KERN_ERR PFX "specify SB port\n"); return -EINVAL; } if (wssport[dev] == SNDRV_AUTO_PORT) { snd_printk(KERN_ERR PFX "specify WSS port\n"); return -EINVAL; } card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0); if (card == NULL) return -ENOMEM; xirq = irq[dev]; if (xirq == SNDRV_AUTO_IRQ) { if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); err = -EBUSY; goto _err; } } xdma1 = dma1[dev]; if (xdma1 == SNDRV_AUTO_DMA) { if ((xdma1 = snd_legacy_find_free_dma(possible_dmas)) < 0) { snd_printk(KERN_ERR PFX "unable to find a free DMA\n"); err = -EBUSY; goto _err; } } if ((err = snd_sgalaxy_detect(dev, xirq, xdma1)) < 0) goto _err; if ((err = snd_ad1848_create(card, wssport[dev] + 4, xirq, xdma1, AD1848_HW_DETECT, &chip)) < 0) goto _err; card->private_data = chip; if ((err = snd_ad1848_pcm(chip, 0, NULL)) < 0) { snd_printdd(PFX "error creating new ad1848 PCM device\n"); goto _err; } if ((err = snd_ad1848_mixer(chip)) < 0) { snd_printdd(PFX "error creating new ad1848 mixer\n"); goto _err; } if ((err = snd_sgalaxy_mixer(chip)) < 0) { snd_printdd(PFX "the mixer rewrite failed\n"); goto _err; } strcpy(card->driver, "Sound Galaxy"); strcpy(card->shortname, "Sound Galaxy"); sprintf(card->longname, "Sound Galaxy at 0x%lx, irq %d, dma %d", wssport[dev], xirq, xdma1); snd_card_set_dev(card, &devptr->dev); if ((err = snd_card_register(card)) < 0) goto _err; platform_set_drvdata(devptr, card); return 0; _err: snd_card_free(card); return err; }