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

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/ca0106/ca0106.h

    r679 r717  
    668668
    669669        unsigned long port;
    670         struct resource *res_port;
    671670        int irq;
    672671
     
    689688        int capture_mic_line_in;
    690689
    691         struct snd_dma_buffer buffer;
     690        struct snd_dma_buffer *buffer;
    692691
    693692        struct snd_ca_midi midi;
  • GPL/trunk/alsa-kernel/pci/ca0106/ca0106_main.c

    r703 r717  
    723723        struct snd_ca0106_pcm *epcm = runtime->private_data;
    724724        int channel = epcm->channel_id;
    725         u32 *table_base = (u32 *)(emu->buffer.area+(8*16*channel));
     725        u32 *table_base = (u32 *)(emu->buffer->area+(8*16*channel));
    726726        u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size);
    727727        u32 hcfg_mask = HCFG_PLAYBACK_S32_LE;
     
    751751        dev_dbg(emu->card->dev,
    752752                "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n",
    753                    emu->buffer.addr, emu->buffer.area, emu->buffer.bytes);
     753                   emu->buffer->addr, emu->buffer->area, emu->buffer->bytes);
    754754#endif /* debug */
    755755        /* Rate can be set per channel. */
     
    801801        snd_ca0106_ptr_write(emu, 0x71, 0, reg71);
    802802
    803         /* FIXME: Check emu->buffer.size before actually writing to it. */
     803        /* FIXME: Check emu->buffer->size before actually writing to it. */
    804804        for(i=0; i < runtime->periods; i++) {
    805805                table_base[i*2] = runtime->dma_addr + (i * period_size_bytes);
     
    807807        }
    808808 
    809         snd_ca0106_ptr_write(emu, PLAYBACK_LIST_ADDR, channel, emu->buffer.addr+(8*16*channel));
     809        snd_ca0106_ptr_write(emu, PLAYBACK_LIST_ADDR, channel, emu->buffer->addr+(8*16*channel));
    810810        snd_ca0106_ptr_write(emu, PLAYBACK_LIST_SIZE, channel, (runtime->periods - 1) << 19);
    811811        snd_ca0106_ptr_write(emu, PLAYBACK_LIST_PTR, channel, 0);
     
    858858        dev_dbg(emu->card->dev,
    859859                "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n",
    860                    emu->buffer.addr, emu->buffer.area, emu->buffer.bytes);
     860                   emu->buffer->addr, emu->buffer->area, emu->buffer->bytes);
    861861#endif /* debug */
    862862        /* reg71 controls ADC rate. */
     
    11881188static void ca0106_stop_chip(struct snd_ca0106 *chip);
    11891189
    1190 static int snd_ca0106_free(struct snd_ca0106 *chip)
    1191 {
    1192         if (chip->res_port != NULL) {
    1193                 /* avoid access to already used hardware */
    1194                 ca0106_stop_chip(chip);
    1195         }
    1196         if (chip->irq >= 0)
    1197                 free_irq(chip->irq, chip);
    1198         // release the data
    1199 #if 1
    1200         if (chip->buffer.area)
    1201                 snd_dma_free_pages(&chip->buffer);
    1202 #endif
    1203 
    1204         // release the i/o port
    1205         release_and_free_resource(chip->res_port);
    1206 
    1207         pci_disable_device(chip->pci);
    1208         kfree(chip);
    1209         return 0;
    1210 }
    1211 
    1212 static int snd_ca0106_dev_free(struct snd_device *device)
    1213 {
    1214         struct snd_ca0106 *chip = device->device_data;
    1215         return snd_ca0106_free(chip);
     1190static void snd_ca0106_free(struct snd_card *card)
     1191{
     1192        struct snd_ca0106 *chip = card->private_data;
     1193
     1194        ca0106_stop_chip(chip);
    12161195}
    12171196
     
    15991578
    16001579static int snd_ca0106_create(int dev, struct snd_card *card,
    1601                                          struct pci_dev *pci,
    1602                                          struct snd_ca0106 **rchip)
    1603 {
    1604         struct snd_ca0106 *chip;
     1580                             struct pci_dev *pci)
     1581{
     1582        struct snd_ca0106 *chip = card->private_data;
    16051583        const struct snd_ca0106_details *c;
    16061584        int err;
    1607         static const struct snd_device_ops ops = {
    1608                 .dev_free = snd_ca0106_dev_free,
    1609         };
    1610 
    1611         *rchip = NULL;
    1612 
    1613         err = pci_enable_device(pci);
     1585
     1586        err = pcim_enable_device(pci);
    16141587        if (err < 0)
    16151588                return err;
    16161589        if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) {
    16171590                dev_err(card->dev, "error to set 32bit mask DMA\n");
    1618                 pci_disable_device(pci);
    16191591                return -ENXIO;
    1620         }
    1621 
    1622         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
    1623         if (chip == NULL) {
    1624                 pci_disable_device(pci);
    1625                 return -ENOMEM;
    16261592        }
    16271593
     
    16321598        spin_lock_init(&chip->emu_lock);
    16331599
     1600        err = pci_request_regions(pci, "snd_ca0106");
     1601        if (err < 0)
     1602                return err;
    16341603        chip->port = pci_resource_start(pci, 0);
    1635         chip->res_port = request_region(chip->port, 0x20, "snd_ca0106");
    1636         if (!chip->res_port) {
    1637                 snd_ca0106_free(chip);
    1638                 dev_err(card->dev, "cannot allocate the port\n");
    1639                 return -EBUSY;
    1640         }
    1641 
    1642         if (request_irq(pci->irq, snd_ca0106_interrupt,
    1643                         IRQF_SHARED, KBUILD_MODNAME, chip)) {
    1644                 snd_ca0106_free(chip);
     1604
     1605        if (devm_request_irq(&pci->dev, pci->irq, snd_ca0106_interrupt,
     1606                             IRQF_SHARED, KBUILD_MODNAME, chip)) {
    16451607                dev_err(card->dev, "cannot grab irq\n");
    16461608                return -EBUSY;
     
    16501612
    16511613        /* This stores the periods table. */
    1652         if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,
    1653                                 1024, &chip->buffer) < 0) {
    1654                 snd_ca0106_free(chip);
     1614        chip->buffer = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 1024);
     1615        if (!chip->buffer)
    16551616                return -ENOMEM;
    1656         }
    1657 
    16581617        pci_set_master(pci);
    16591618        /* read serial */
     
    16831642
    16841643        ca0106_init_chip(chip, 0);
    1685 
    1686         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
    1687         if (err < 0) {
    1688                 snd_ca0106_free(chip);
    1689                 return err;
    1690         }
    1691         *rchip = chip;
    16921644        return 0;
    16931645}
     
    17771729
    17781730
    1779 static int snd_ca0106_probe(struct pci_dev *pci,
    1780                                         const struct pci_device_id *pci_id)
     1731static int __snd_ca0106_probe(struct pci_dev *pci,
     1732                              const struct pci_device_id *pci_id)
    17811733{
    17821734        static int dev;
     
    17921744        }
    17931745
    1794         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
    1795                            0, &card);
     1746        err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
     1747                                sizeof(*chip), &card);
    17961748        if (err < 0)
    17971749                return err;
    1798 
    1799         err = snd_ca0106_create(dev, card, pci, &chip);
     1750        chip = card->private_data;
     1751
     1752        err = snd_ca0106_create(dev, card, pci);
    18001753        if (err < 0)
    1801                 goto error;
    1802         card->private_data = chip;
     1754                return err;
     1755        card->private_free = snd_ca0106_free;
    18031756
    18041757        for (i = 0; i < 4; i++) {
    18051758                err = snd_ca0106_pcm(chip, i);
    18061759                if (err < 0)
    1807                         goto error;
     1760                        return err;
    18081761        }
    18091762
     
    18121765                err = snd_ca0106_ac97(chip);
    18131766                if (err < 0)
    1814                         goto error;
     1767                        return err;
    18151768        }
    18161769        err = snd_ca0106_mixer(chip);
    18171770        if (err < 0)
    1818                 goto error;
     1771                return err;
    18191772
    18201773        dev_dbg(card->dev, "probe for MIDI channel A ...");
    18211774        err = snd_ca0106_midi(chip, CA0106_MIDI_CHAN_A);
    18221775        if (err < 0)
    1823                 goto error;
     1776                return err;
    18241777        dev_dbg(card->dev, " done.\n");
    18251778
     
    18301783        err = snd_card_register(card);
    18311784        if (err < 0)
    1832                 goto error;
     1785                return err;
    18331786
    18341787        pci_set_drvdata(pci, card);
    18351788        dev++;
    18361789        return 0;
    1837 
    1838  error:
    1839         snd_card_free(card);
    1840         return err;
    1841 }
    1842 
    1843 static void snd_ca0106_remove(struct pci_dev *pci)
    1844 {
    1845         snd_card_free(pci_get_drvdata(pci));
     1790}
     1791
     1792static int snd_ca0106_probe(struct pci_dev *pci,
     1793                            const struct pci_device_id *pci_id)
     1794{
     1795        return snd_card_free_on_error(&pci->dev, __snd_ca0106_probe(pci, pci_id));
    18461796}
    18471797
     
    18991849        .id_table = snd_ca0106_ids,
    19001850        .probe = snd_ca0106_probe,
    1901         .remove = snd_ca0106_remove,
    19021851        .driver = {
    19031852                .pm = SND_CA0106_PM_OPS,
Note: See TracChangeset for help on using the changeset viewer.