Update of /cvsroot/alsa/alsa-kernel/isa/gus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14161
Modified Files: gusextreme.c Log Message: <[EMAIL PROTECTED]> Whilst chasing an oops, I shortened some error paths. (Also sets card to NULL when something goes wrong). Index: gusextreme.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/isa/gus/gusextreme.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- gusextreme.c 14 Oct 2003 13:08:17 -0000 1.12 +++ gusextreme.c 15 Mar 2004 19:29:13 -0000 1.13 @@ -220,17 +220,17 @@ xgf1_irq = gf1_irq[dev]; if (xgf1_irq == SNDRV_AUTO_IRQ) { if ((xgf1_irq = snd_legacy_find_free_irq(possible_gf1_irqs)) < 0) { - snd_card_free(card); snd_printk("unable to find a free IRQ for GF1\n"); - return -EBUSY; + err = -EBUSY; + goto out; } } xess_irq = irq[dev]; if (xess_irq == SNDRV_AUTO_IRQ) { if ((xess_irq = snd_legacy_find_free_irq(possible_ess_irqs)) < 0) { - snd_card_free(card); snd_printk("unable to find a free IRQ for ES1688\n"); - return -EBUSY; + err = -EBUSY; + goto out; } } if (mpu_port[dev] == SNDRV_AUTO_PORT) @@ -241,26 +241,24 @@ xgf1_dma = dma1[dev]; if (xgf1_dma == SNDRV_AUTO_DMA) { if ((xgf1_dma = snd_legacy_find_free_dma(possible_gf1_dmas)) < 0) { - snd_card_free(card); snd_printk("unable to find a free DMA for GF1\n"); - return -EBUSY; + err = -EBUSY; + goto out; } } xess_dma = dma8[dev]; if (xess_dma == SNDRV_AUTO_DMA) { if ((xess_dma = snd_legacy_find_free_dma(possible_ess_dmas)) < 0) { - snd_card_free(card); snd_printk("unable to find a free DMA for ES1688\n"); - return -EBUSY; + err = -EBUSY; + goto out; } } if ((err = snd_es1688_create(card, port[dev], mpu_port[dev], xess_irq, xmpu_irq, xess_dma, - ES1688_HW_1688, &es1688)) < 0) { - snd_card_free(card); - return err; - } + ES1688_HW_1688, &es1688)) < 0) + goto out; if (gf1_port[dev] < 0) gf1_port[dev] = port[dev] + 0x20; if ((err = snd_gus_create(card, @@ -270,77 +268,65 @@ -1, 0, channels[dev], pcm_channels[dev], 0, - &gus)) < 0) { - snd_card_free(card); - return err; - } - if ((err = snd_gusextreme_detect(dev, card, gus, es1688)) < 0) { - snd_card_free(card); - return err; - } + &gus)) < 0) + goto out; + + if ((err = snd_gusextreme_detect(dev, card, gus, es1688)) < 0) + goto out; + snd_gusextreme_init(dev, gus); - if ((err = snd_gus_initialize(gus)) < 0) { - snd_card_free(card); - return err; - } + if ((err = snd_gus_initialize(gus)) < 0) + goto out; + if (!gus->ess_flag) { snd_printdd("GUS Extreme soundcard was not detected at 0x%lx\n", gus->gf1.port); - snd_card_free(card); - return -ENODEV; - } - if ((err = snd_es1688_pcm(es1688, 0, NULL)) < 0) { - snd_card_free(card); - return err; - } - if ((err = snd_es1688_mixer(es1688)) < 0) { - snd_card_free(card); - return err; + err = -ENODEV; + goto out; } + if ((err = snd_es1688_pcm(es1688, 0, NULL)) < 0) + goto out; + + if ((err = snd_es1688_mixer(es1688)) < 0) + goto out; + snd_component_add(card, "ES1688"); if (pcm_channels[dev] > 0) { - if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) { - snd_card_free(card); - return err; - } - } - if ((err = snd_gf1_new_mixer(gus)) < 0) { - snd_card_free(card); - return err; - } - if ((err = snd_gusextreme_mixer(es1688)) < 0) { - snd_card_free(card); - return err; + if ((err = snd_gf1_pcm_new(gus, 1, 1, NULL)) < 0) + goto out; } + if ((err = snd_gf1_new_mixer(gus)) < 0) + goto out; + + if ((err = snd_gusextreme_mixer(es1688)) < 0) + goto out; if (snd_opl3_create(card, es1688->port, es1688->port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) { printk(KERN_ERR "gusextreme: opl3 not detected at 0x%lx\n", es1688->port); } else { - if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0) { - snd_card_free(card); - return err; - } + if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0) + goto out; } - if (es1688->mpu_port >= 0x300) { - if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688, + if (es1688->mpu_port >= 0x300 && + ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_ES1688, es1688->mpu_port, 0, xmpu_irq, SA_INTERRUPT, - NULL)) < 0) { - snd_card_free(card); - return err; - } - } + NULL)) < 0) + goto out; sprintf(card->longname, "Gravis UltraSound Extreme at 0x%lx, irq %i&%i, dma %i&%i", es1688->port, xgf1_irq, xess_irq, xgf1_dma, xess_dma); - if ((err = snd_card_register(card)) < 0) { - snd_card_free(card); - return err; - } + if ((err = snd_card_register(card)) < 0) + goto out; + snd_gusextreme_cards[dev] = card; return 0; + + out: + snd_card_free(card); + return err; } static int __init snd_gusextreme_legacy_auto_probe(unsigned long xport) ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog