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:
5 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

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

    r703 r717  
    7272        }
    7373
    74         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
    75                            0, &card);
     74        err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     75                                sizeof(*trident), &card);
    7676        if (err < 0)
    7777                return err;
     78        trident = card->private_data;
    7879
    7980        err = snd_trident_create(card, pci,
    8081                                 pcm_channels[dev],
    8182                                 ((pci->vendor << 16) | pci->device) == TRIDENT_DEVICE_ID_SI7018 ? 1 : 2,
    82                                  wavetable_size[dev],
    83                                  &trident);
    84         if (err < 0) {
    85                 snd_card_free(card);
     83                                 wavetable_size[dev]);
     84        if (err < 0)
    8685                return err;
    87         }
    88         card->private_data = trident;
    8986
    9087        switch (trident->device) {
     
    112109
    113110        err = snd_trident_pcm(trident, pcm_dev++);
    114         if (err < 0) {
    115                 snd_card_free(card);
     111        if (err < 0)
    116112                return err;
    117         }
    118113        switch (trident->device) {
    119114        case TRIDENT_DEVICE_ID_DX:
    120115        case TRIDENT_DEVICE_ID_NX:
    121116                err = snd_trident_foldback_pcm(trident, pcm_dev++);
    122                 if (err < 0) {
    123                         snd_card_free(card);
     117                if (err < 0)
    124118                        return err;
    125                 }
    126119                break;
    127120        }
    128121        if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) {
    129122                err = snd_trident_spdif_pcm(trident, pcm_dev++);
    130                 if (err < 0) {
    131                         snd_card_free(card);
     123                if (err < 0)
    132124                        return err;
    133                 }
    134125        }
    135126        if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
     
    139130                                          MPU401_INFO_IRQ_HOOK,
    140131                                          -1, &trident->rmidi);
    141                 if (err < 0) {
    142                         snd_card_free(card);
     132                if (err < 0)
    143133                        return err;
    144                 }
    145134        }
    146135
     
    148137
    149138        err = snd_card_register(card);
    150         if (err < 0) {
    151                 snd_card_free(card);
     139        if (err < 0)
    152140                return err;
    153         }
    154141        pci_set_drvdata(pci, card);
    155142        dev++;
    156143        return 0;
    157 }
    158 
    159 static void snd_trident_remove(struct pci_dev *pci)
    160 {
    161         snd_card_free(pci_get_drvdata(pci));
    162144}
    163145
     
    166148        .id_table = snd_trident_ids,
    167149        .probe = snd_trident_probe,
    168         .remove = snd_trident_remove,
    169150#ifdef CONFIG_PM_SLEEP
    170151        .driver = {
  • GPL/trunk/alsa-kernel/pci/trident/trident.h

    r703 r717  
    252252        __le32 *entries;                /* 16k-aligned TLB table */
    253253        dma_addr_t entries_dmaaddr;     /* 16k-aligned PCI address to TLB table */
    254         struct snd_dma_buffer buffer;
     254        struct snd_dma_buffer *buffer;
    255255        struct snd_util_memhdr * memhdr;        /* page allocation list */
    256         struct snd_dma_buffer silent_page;
     256        struct snd_dma_buffer *silent_page;
    257257};
    258258
     
    401401                       int pcm_streams,
    402402                       int pcm_spdif_device,
    403                        int max_wavetable_size,
    404                        struct snd_trident ** rtrident);
     403                       int max_wavetable_size);
    405404int snd_trident_create_gameport(struct snd_trident *trident);
    406405
  • GPL/trunk/alsa-kernel/pci/trident/trident_main.c

    r703 r717  
    4747static void snd_trident_clear_voices(struct snd_trident * trident,
    4848                                     unsigned short v_min, unsigned short v_max);
    49 static int snd_trident_free(struct snd_trident *trident);
     49static void snd_trident_free(struct snd_card *card);
    5050
    5151/*
     
    33123312}
    33133313
    3314 static int snd_trident_dev_free(struct snd_device *device)
    3315 {
    3316         struct snd_trident *trident = device->device_data;
    3317         return snd_trident_free(trident);
    3318 }
    3319 
    33203314/*---------------------------------------------------------------------------
    33213315   snd_trident_tlb_alloc
     
    33373331           32kB region and correct offset when necessary */
    33383332
    3339         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &trident->pci->dev,
    3340                                 2 * SNDRV_TRIDENT_MAX_PAGES * 4, &trident->tlb.buffer) < 0) {
     3333        trident->tlb.buffer =
     3334                snd_devm_alloc_pages(&trident->pci->dev, SNDRV_DMA_TYPE_DEV,
     3335                                     2 * SNDRV_TRIDENT_MAX_PAGES * 4);
     3336        if (!trident->tlb.buffer) {
    33413337                dev_err(trident->card->dev, "unable to allocate TLB buffer\n");
    33423338                return -ENOMEM;
    33433339        }
    3344         trident->tlb.entries = (__le32 *)ALIGN((unsigned long)trident->tlb.buffer.area, SNDRV_TRIDENT_MAX_PAGES * 4);
    3345         trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4);
     3340        trident->tlb.entries = (__le32 *)ALIGN((unsigned long)trident->tlb.buffer->area, SNDRV_TRIDENT_MAX_PAGES * 4);
     3341        trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer->addr, SNDRV_TRIDENT_MAX_PAGES * 4);
    33463342
    33473343        /* allocate and setup silent page and initialise TLB entries */
    3348         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &trident->pci->dev,
    3349                                 SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) {
     3344        trident->tlb.silent_page =
     3345                snd_devm_alloc_pages(&trident->pci->dev, SNDRV_DMA_TYPE_DEV,
     3346                                     SNDRV_TRIDENT_PAGE_SIZE);
     3347        if (!trident->tlb.silent_page) {
    33503348                dev_err(trident->card->dev, "unable to allocate silent page\n");
    33513349                return -ENOMEM;
    33523350        }
    3353         memset(trident->tlb.silent_page.area, 0, SNDRV_TRIDENT_PAGE_SIZE);
     3351        memset(trident->tlb.silent_page->area, 0, SNDRV_TRIDENT_PAGE_SIZE);
    33543352        for (i = 0; i < SNDRV_TRIDENT_MAX_PAGES; i++)
    3355                 trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page.addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1));
     3353                trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page->addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1));
    33563354
    33573355        /* use emu memory block manager code to manage tlb page allocation */
     
    35103508                       int pcm_streams,
    35113509                       int pcm_spdif_device,
    3512                        int max_wavetable_size,
    3513                        struct snd_trident ** rtrident)
    3514 {
    3515         struct snd_trident *trident;
     3510                       int max_wavetable_size)
     3511{
     3512        struct snd_trident *trident = card->private_data;
    35163513        int i, err;
    35173514        struct snd_trident_voice *voice;
    35183515        struct snd_trident_pcm_mixer *tmix;
    3519         static const struct snd_device_ops ops = {
    3520                 .dev_free =     snd_trident_dev_free,
    3521         };
    3522 
    3523         *rtrident = NULL;
    35243516
    35253517        /* enable PCI device */
    3526         err = pci_enable_device(pci);
     3518        err = pcim_enable_device(pci);
    35273519        if (err < 0)
    35283520                return err;
     
    35313523                dev_err(card->dev,
    35323524                        "architecture does not support 30bit PCI busmaster DMA\n");
    3533                 pci_disable_device(pci);
    35343525                return -ENXIO;
    35353526        }
    35363527       
    3537         trident = kzalloc(sizeof(*trident), GFP_KERNEL);
    3538         if (trident == NULL) {
    3539                 pci_disable_device(pci);
    3540                 return -ENOMEM;
    3541         }
    35423528        trident->device = (pci->vendor << 16) | pci->device;
    35433529        trident->card = card;
     
    35553541        trident->synth.max_size = max_wavetable_size * 1024;
    35563542        trident->irq = -1;
     3543        card->private_free = snd_trident_free;
    35573544
    35583545        trident->midi_port = TRID_REG(trident, T4D_MPU401_BASE);
     
    35603547
    35613548        err = pci_request_regions(pci, "Trident Audio");
    3562         if (err < 0) {
    3563                 kfree(trident);
    3564                 pci_disable_device(pci);
     3549        if (err < 0)
    35653550                return err;
    3566         }
    35673551        trident->port = pci_resource_start(pci, 0);
    35683552
    3569         if (request_irq(pci->irq, snd_trident_interrupt, IRQF_SHARED,
    3570                         KBUILD_MODNAME, trident)) {
     3553        if (devm_request_irq(&pci->dev, pci->irq, snd_trident_interrupt,
     3554                             IRQF_SHARED, KBUILD_MODNAME, trident)) {
    35713555                dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    3572                 snd_trident_free(trident);
    35733556                return -EBUSY;
    35743557        }
     
    35783561        /* allocate 16k-aligned TLB for NX cards */
    35793562        trident->tlb.entries = NULL;
    3580         trident->tlb.buffer.area = NULL;
    35813563        if (trident->device == TRIDENT_DEVICE_ID_NX) {
    35823564                err = snd_trident_tlb_alloc(trident);
    3583                 if (err < 0) {
    3584                         snd_trident_free(trident);
     3565                if (err < 0)
    35853566                        return err;
    3586                 }
    35873567        }
    35883568
     
    36043584                break;
    36053585        }
    3606         if (err < 0) {
    3607                 snd_trident_free(trident);
     3586        if (err < 0)
    36083587                return err;
    3609         }
    3610 
    3611         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops);
    3612         if (err < 0) {
    3613                 snd_trident_free(trident);
    3614                 return err;
    3615         }
    36163588
    36173589        err = snd_trident_mixer(trident, pcm_spdif_device);
     
    36373609
    36383610        snd_trident_proc_init(trident);
    3639         *rtrident = trident;
    36403611        return 0;
    36413612}
     
    36473618                the 4DWave card.
    36483619               
    3649    Parameters:  trident  - device specific private data for 4DWave card
     3620   Parameters:  card - card to release
    36503621
    36513622   Returns:     None.
     
    36533624  ---------------------------------------------------------------------------*/
    36543625
    3655 static int snd_trident_free(struct snd_trident *trident)
    3656 {
     3626static void snd_trident_free(struct snd_card *card)
     3627{
     3628        struct snd_trident *trident = card->private_data;
     3629
    36573630        snd_trident_free_gameport(trident);
    36583631        snd_trident_disable_eso(trident);
     
    36633636                outl(0, TRID_REG(trident, SI_SERIAL_INTF_CTRL));
    36643637        }
    3665         if (trident->irq >= 0)
    3666                 free_irq(trident->irq, trident);
    3667         if (trident->tlb.buffer.area) {
     3638        if (trident->tlb.buffer) {
    36683639                outl(0, TRID_REG(trident, NX_TLBC));
    36693640                snd_util_memhdr_free(trident->tlb.memhdr);
    3670                 if (trident->tlb.silent_page.area)
    3671                         snd_dma_free_pages(&trident->tlb.silent_page);
    3672                 snd_dma_free_pages(&trident->tlb.buffer);
    3673         }
    3674         pci_release_regions(trident->pci);
    3675         pci_disable_device(trident->pci);
    3676         kfree(trident);
    3677         return 0;
     3641        }
    36783642}
    36793643
  • GPL/trunk/alsa-kernel/pci/trident/trident_memory.c

    r703 r717  
    3232#define set_tlb_bus(trident,page,addr) __set_tlb_bus(trident,page,addr)
    3333/* fill TLB entrie(s) corresponding to page with silence pointer */
    34 #define set_silent_tlb(trident,page)    __set_tlb_bus(trident, page, trident->tlb.silent_page.addr)
     34#define set_silent_tlb(trident,page)    __set_tlb_bus(trident, page, trident->tlb.silent_page->addr)
    3535/* get aligned page from offset address */
    3636#define get_aligned_page(offset)        ((offset) >> 12)
     
    5959{
    6060        page <<= 1;
    61         __set_tlb_bus(trident, page, trident->tlb.silent_page.addr);
    62         __set_tlb_bus(trident, page+1, trident->tlb.silent_page.addr);
     61        __set_tlb_bus(trident, page, trident->tlb.silent_page->addr);
     62        __set_tlb_bus(trident, page+1, trident->tlb.silent_page->addr);
    6363}
    6464
     
    9393        page *= UNIT_PAGES;
    9494        for (i = 0; i < UNIT_PAGES; i++, page++)
    95                 __set_tlb_bus(trident, page, trident->tlb.silent_page.addr);
     95                __set_tlb_bus(trident, page, trident->tlb.silent_page->addr);
    9696}
    9797
Note: See TracChangeset for help on using the changeset viewer.