Ignore:
Timestamp:
Aug 7, 2022, 6:11:12 PM (3 years ago)
Author:
David Azarewicz
Message:

Merge changes from next branch.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/ens1370.c

    r703 r717  
    418418
    419419#ifdef CHIP1370
    420         struct snd_dma_buffer dma_bug;
     420        struct snd_dma_buffer *dma_bug;
    421421#endif
    422422
     
    18761876 */
    18771877
    1878 static int snd_ensoniq_free(struct ensoniq *ensoniq)
    1879 {
     1878static void snd_ensoniq_free(struct snd_card *card)
     1879{
     1880        struct ensoniq *ensoniq = card->private_data;
     1881
    18801882        snd_ensoniq_free_gameport(ensoniq);
    1881         if (ensoniq->irq < 0)
    1882                 goto __hw_end;
    18831883#ifdef CHIP1370
    18841884        outl(ES_1370_SERR_DISABLE, ES_REG(ensoniq, CONTROL));   /* switch everything off */
     
    18881888        outl(0, ES_REG(ensoniq, SERIAL));       /* clear serial interface */
    18891889#endif
    1890         pci_set_power_state(ensoniq->pci, PCI_D3hot);
    1891       __hw_end:
    1892 #ifdef CHIP1370
    1893         if (ensoniq->dma_bug.area)
    1894                 snd_dma_free_pages(&ensoniq->dma_bug);
    1895 #endif
    1896         if (ensoniq->irq >= 0)
    1897                 free_irq(ensoniq->irq, ensoniq);
    1898         pci_release_regions(ensoniq->pci);
    1899         pci_disable_device(ensoniq->pci);
    1900         kfree(ensoniq);
    1901         return 0;
    1902 }
    1903 
    1904 static int snd_ensoniq_dev_free(struct snd_device *device)
    1905 {
    1906         struct ensoniq *ensoniq = device->device_data;
    1907         return snd_ensoniq_free(ensoniq);
    19081890}
    19091891
     
    19391921        outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
    19401922        outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
    1941         outl(ensoniq->dma_bug.addr, ES_REG(ensoniq, PHANTOM_FRAME));
     1923        outl(ensoniq->dma_bug->addr, ES_REG(ensoniq, PHANTOM_FRAME));
    19421924        outl(0, ES_REG(ensoniq, PHANTOM_COUNT));
    19431925#else
     
    20362018
    20372019static int snd_ensoniq_create(struct snd_card *card,
    2038                               struct pci_dev *pci,
    2039                               struct ensoniq **rensoniq)
    2040 {
    2041         struct ensoniq *ensoniq;
     2020                              struct pci_dev *pci)
     2021{
     2022        struct ensoniq *ensoniq = card->private_data;
    20422023        int err;
    2043         static const struct snd_device_ops ops = {
    2044                 .dev_free =     snd_ensoniq_dev_free,
    2045         };
    2046 
    2047         *rensoniq = NULL;
    2048         err = pci_enable_device(pci);
     2024
     2025        err = pcim_enable_device(pci);
    20492026        if (err < 0)
    20502027                return err;
    2051         ensoniq = kzalloc(sizeof(*ensoniq), GFP_KERNEL);
    2052         if (ensoniq == NULL) {
    2053                 pci_disable_device(pci);
    2054                 return -ENOMEM;
    2055         }
    20562028        spin_lock_init(&ensoniq->reg_lock);
    20572029        mutex_init(&ensoniq->src_mutex);
     
    20602032        ensoniq->irq = -1;
    20612033        err = pci_request_regions(pci, "Ensoniq AudioPCI");
    2062         if (err < 0) {
    2063                 kfree(ensoniq);
    2064                 pci_disable_device(pci);
     2034        if (err < 0)
    20652035                return err;
    2066         }
    20672036        ensoniq->port = pci_resource_start(pci, 0);
     2037#ifndef TARGET_OS2
     2038        if (devm_request_irq(&pci->dev, pci->irq, snd_audiopci_interrupt,
     2039                             IRQF_SHARED, KBUILD_MODNAME, ensoniq)) {
     2040                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
     2041                return -EBUSY;
     2042        }
     2043#else
    20682044        if (request_irq(pci->irq, snd_audiopci_interrupt, IRQF_SHARED,
    20692045                        KBUILD_MODNAME, ensoniq)) {
    20702046                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    2071                 snd_ensoniq_free(ensoniq);
     2047                snd_ensoniq_free(card);
    20722048                return -EBUSY;
    20732049        }
     2050#endif
    20742051        ensoniq->irq = pci->irq;
    20752052        card->sync_irq = ensoniq->irq;
    20762053#ifdef CHIP1370
    2077         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
    2078                                 16, &ensoniq->dma_bug) < 0) {
    2079                 dev_err(card->dev, "unable to allocate space for phantom area - dma_bug\n");
    2080                 snd_ensoniq_free(ensoniq);
    2081                 return -EBUSY;
    2082         }
     2054        ensoniq->dma_bug =
     2055                snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 16);
     2056        if (!ensoniq->dma_bug)
     2057                return -ENOMEM;
    20832058#endif
    20842059        pci_set_master(pci);
     
    21072082#endif
    21082083
     2084        card->private_free = snd_ensoniq_free;
    21092085        snd_ensoniq_chip_init(ensoniq);
    21102086
    2111         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, ensoniq, &ops);
    2112         if (err < 0) {
    2113                 snd_ensoniq_free(ensoniq);
    2114                 return err;
    2115         }
    2116 
    21172087        snd_ensoniq_proc_init(ensoniq);
    2118 
    2119         *rensoniq = ensoniq;
    21202088        return 0;
    21212089}
     
    23532321}
    23542322
    2355 static int snd_audiopci_probe(struct pci_dev *pci,
    2356                               const struct pci_device_id *pci_id)
     2323static int __snd_audiopci_probe(struct pci_dev *pci,
     2324                                const struct pci_device_id *pci_id)
    23572325{
    23582326        static int dev;
     
    23682336        }
    23692337
    2370         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
    2371                            0, &card);
     2338        err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     2339                                sizeof(*ensoniq), &card);
    23722340        if (err < 0)
    23732341                return err;
    2374 
    2375         err = snd_ensoniq_create(card, pci, &ensoniq);
    2376         if (err < 0) {
    2377                 snd_card_free(card);
     2342        ensoniq = card->private_data;
     2343
     2344        err = snd_ensoniq_create(card, pci);
     2345        if (err < 0)
    23782346                return err;
    2379         }
    2380         card->private_data = ensoniq;
    23812347
    23822348#ifdef CHIP1370
    23832349        err = snd_ensoniq_1370_mixer(ensoniq);
    2384         if (err < 0) {
    2385                 snd_card_free(card);
     2350        if (err < 0)
    23862351                return err;
    2387         }
    23882352#endif
    23892353#ifdef CHIP1371
    23902354        err = snd_ensoniq_1371_mixer(ensoniq, spdif[dev], lineio[dev]);
    2391         if (err < 0) {
    2392                 snd_card_free(card);
     2355        if (err < 0)
    23932356                return err;
    2394         }
    23952357#endif
    23962358        err = snd_ensoniq_pcm(ensoniq, 0);
    2397         if (err < 0) {
    2398                 snd_card_free(card);
     2359        if (err < 0)
    23992360                return err;
    2400         }
    24012361        err = snd_ensoniq_pcm2(ensoniq, 1);
    2402         if (err < 0) {
    2403                 snd_card_free(card);
     2362        if (err < 0)
    24042363                return err;
    2405         }
    24062364        err = snd_ensoniq_midi(ensoniq, 0);
    2407         if (err < 0) {
    2408                 snd_card_free(card);
     2365        if (err < 0)
    24092366                return err;
    2410         }
    24112367
    24122368        snd_ensoniq_create_gameport(ensoniq, dev);
     
    24222378
    24232379        err = snd_card_register(card);
    2424         if (err < 0) {
    2425                 snd_card_free(card);
     2380        if (err < 0)
    24262381                return err;
    2427         }
    24282382
    24292383        pci_set_drvdata(pci, card);
     
    24322386}
    24332387
    2434 static void snd_audiopci_remove(struct pci_dev *pci)
    2435 {
    2436         snd_card_free(pci_get_drvdata(pci));
     2388static int snd_audiopci_probe(struct pci_dev *pci,
     2389                              const struct pci_device_id *pci_id)
     2390{
     2391        return snd_card_free_on_error(&pci->dev, __snd_audiopci_probe(pci, pci_id));
    24372392}
    24382393
     
    24412396        .id_table = snd_audiopci_ids,
    24422397        .probe = snd_audiopci_probe,
    2443         .remove = snd_audiopci_remove,
    24442398        .driver = {
    24452399                .pm = SND_ENSONIQ_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.