diff options
Diffstat (limited to 'sound/pci/trident/trident.c')
-rw-r--r-- | sound/pci/trident/trident.c | 39 |
1 files changed, 10 insertions, 29 deletions
diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c index 60e4dca28c2b..9922ab40798c 100644 --- a/sound/pci/trident/trident.c +++ b/sound/pci/trident/trident.c @@ -62,21 +62,18 @@ static int snd_trident_probe(struct pci_dev *pci, return -ENOENT; } - err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, - 0, &card); + err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, + sizeof(*trident), &card); if (err < 0) return err; + trident = card->private_data; err = snd_trident_create(card, pci, pcm_channels[dev], ((pci->vendor << 16) | pci->device) == TRIDENT_DEVICE_ID_SI7018 ? 1 : 2, - wavetable_size[dev], - &trident); - if (err < 0) { - snd_card_free(card); + wavetable_size[dev]); + if (err < 0) return err; - } - card->private_data = trident; switch (trident->device) { case TRIDENT_DEVICE_ID_DX: @@ -102,26 +99,20 @@ static int snd_trident_probe(struct pci_dev *pci, card->shortname, trident->port, trident->irq); err = snd_trident_pcm(trident, pcm_dev++); - if (err < 0) { - snd_card_free(card); + if (err < 0) return err; - } switch (trident->device) { case TRIDENT_DEVICE_ID_DX: case TRIDENT_DEVICE_ID_NX: err = snd_trident_foldback_pcm(trident, pcm_dev++); - if (err < 0) { - snd_card_free(card); + if (err < 0) return err; - } break; } if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) { err = snd_trident_spdif_pcm(trident, pcm_dev++); - if (err < 0) { - snd_card_free(card); + if (err < 0) return err; - } } if (trident->device != TRIDENT_DEVICE_ID_SI7018) { err = snd_mpu401_uart_new(card, 0, MPU401_HW_TRID4DWAVE, @@ -129,34 +120,24 @@ static int snd_trident_probe(struct pci_dev *pci, MPU401_INFO_INTEGRATED | MPU401_INFO_IRQ_HOOK, -1, &trident->rmidi); - if (err < 0) { - snd_card_free(card); + if (err < 0) return err; - } } snd_trident_create_gameport(trident); err = snd_card_register(card); - if (err < 0) { - snd_card_free(card); + if (err < 0) return err; - } pci_set_drvdata(pci, card); dev++; return 0; } -static void snd_trident_remove(struct pci_dev *pci) -{ - snd_card_free(pci_get_drvdata(pci)); -} - static struct pci_driver trident_driver = { .name = KBUILD_MODNAME, .id_table = snd_trident_ids, .probe = snd_trident_probe, - .remove = snd_trident_remove, #ifdef CONFIG_PM_SLEEP .driver = { .pm = &snd_trident_pm, |