Changeset 717 for GPL/trunk/alsa-kernel/pci/emu10k1/emu10k1x.c
- Timestamp:
- Aug 7, 2022, 6:11:12 PM (3 years ago)
- Location:
- GPL/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/trunk
- Property svn:mergeinfo changed
/GPL/branches/uniaud32-next merged: 710-716
- Property svn:mergeinfo changed
-
GPL/trunk/alsa-kernel/pci/emu10k1/emu10k1x.c
r703 r717 220 220 221 221 unsigned long port; 222 struct resource *res_port;223 222 int irq; 224 223 … … 237 236 u32 spdif_bits[3]; // SPDIF out setup 238 237 239 struct snd_dma_buffer dma_buffer;238 struct snd_dma_buffer *dma_buffer; 240 239 241 240 struct emu10k1x_midi midi; … … 446 445 struct emu10k1x_pcm *epcm = runtime->private_data; 447 446 int voice = epcm->voice->number; 448 u32 *table_base = (u32 *)(emu->dma_buffer .area+1024*voice);447 u32 *table_base = (u32 *)(emu->dma_buffer->area+1024*voice); 449 448 u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size); 450 449 int i; … … 455 454 } 456 455 457 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer .addr+1024*voice);456 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_ADDR, voice, emu->dma_buffer->addr+1024*voice); 458 457 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_SIZE, voice, (runtime->periods - 1) << 19); 459 458 snd_emu10k1x_ptr_write(emu, PLAYBACK_LIST_PTR, voice, 0); … … 741 740 } 742 741 743 static int snd_emu10k1x_free(struct emu10k1x *chip) 744 { 742 static void snd_emu10k1x_free(struct snd_card *card) 743 { 744 struct emu10k1x *chip = card->private_data; 745 745 746 snd_emu10k1x_ptr_write(chip, TRIGGER_CHANNEL, 0, 0); 746 747 // disable interrupts … … 748 749 // disable audio 749 750 outl(HCFG_LOCKSOUNDCACHE, chip->port + HCFG); 750 751 /* release the irq */752 if (chip->irq >= 0)753 free_irq(chip->irq, chip);754 755 // release the i/o port756 release_and_free_resource(chip->res_port);757 758 // release the DMA759 if (chip->dma_buffer.area) {760 snd_dma_free_pages(&chip->dma_buffer);761 }762 763 pci_disable_device(chip->pci);764 765 // release the data766 kfree(chip);767 return 0;768 }769 770 static int snd_emu10k1x_dev_free(struct snd_device *device)771 {772 struct emu10k1x *chip = device->device_data;773 return snd_emu10k1x_free(chip);774 751 } 775 752 … … 889 866 890 867 static int snd_emu10k1x_create(struct snd_card *card, 891 struct pci_dev *pci, 892 struct emu10k1x **rchip) 893 { 894 struct emu10k1x *chip; 868 struct pci_dev *pci) 869 { 870 struct emu10k1x *chip = card->private_data; 895 871 int err; 896 872 int ch; 897 static const struct snd_device_ops ops = { 898 .dev_free = snd_emu10k1x_dev_free, 899 }; 900 901 *rchip = NULL; 902 903 err = pci_enable_device(pci); 873 874 err = pcim_enable_device(pci); 904 875 if (err < 0) 905 876 return err; … … 907 878 if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(28)) < 0) { 908 879 dev_err(card->dev, "error to set 28bit mask DMA\n"); 909 pci_disable_device(pci);910 880 return -ENXIO; 911 }912 913 chip = kzalloc(sizeof(*chip), GFP_KERNEL);914 if (chip == NULL) {915 pci_disable_device(pci);916 return -ENOMEM;917 881 } 918 882 … … 924 888 spin_lock_init(&chip->voice_lock); 925 889 890 err = pci_request_regions(pci, "EMU10K1X"); 891 if (err < 0) 892 return err; 926 893 chip->port = pci_resource_start(pci, 0); 927 chip->res_port = request_region(chip->port, 8, "EMU10K1X"); 928 if (!chip->res_port) { 929 dev_err(card->dev, "cannot allocate the port 0x%lx\n", 930 chip->port); 931 snd_emu10k1x_free(chip); 932 return -EBUSY; 933 } 934 935 if (request_irq(pci->irq, snd_emu10k1x_interrupt, 936 IRQF_SHARED, KBUILD_MODNAME, chip)) { 894 895 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1x_interrupt, 896 IRQF_SHARED, KBUILD_MODNAME, chip)) { 937 897 dev_err(card->dev, "cannot grab irq %d\n", pci->irq); 938 snd_emu10k1x_free(chip);939 898 return -EBUSY; 940 899 } 941 900 chip->irq = pci->irq; 942 901 card->sync_irq = chip->irq; 902 card->private_free = snd_emu10k1x_free; 943 903 944 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev,945 4 * 1024, &chip->dma_buffer) < 0) {946 snd_emu10k1x_free(chip);904 chip->dma_buffer = snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 905 4 * 1024); 906 if (!chip->dma_buffer) 947 907 return -ENOMEM; 948 }949 908 950 909 pci_set_master(pci); … … 1006 965 outl(HCFG_LOCKSOUNDCACHE|HCFG_AUDIOENABLE, chip->port+HCFG); 1007 966 1008 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1009 if (err < 0) {1010 snd_emu10k1x_free(chip);1011 return err;1012 }1013 *rchip = chip;1014 967 return 0; 1015 968 } … … 1546 1499 } 1547 1500 1548 static int snd_emu10k1x_probe(struct pci_dev *pci,1549 1501 static int __snd_emu10k1x_probe(struct pci_dev *pci, 1502 const struct pci_device_id *pci_id) 1550 1503 { 1551 1504 static int dev; … … 1561 1514 } 1562 1515 1563 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1564 0, &card); 1565 if (err < 0) 1566 return err; 1567 1568 err = snd_emu10k1x_create(card, pci, &chip); 1569 if (err < 0) { 1570 snd_card_free(card); 1571 return err; 1572 } 1516 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 1517 sizeof(*chip), &card); 1518 if (err < 0) 1519 return err; 1520 chip = card->private_data; 1521 1522 err = snd_emu10k1x_create(card, pci); 1523 if (err < 0) 1524 return err; 1573 1525 1574 1526 err = snd_emu10k1x_pcm(chip, 0); 1575 if (err < 0) { 1576 snd_card_free(card); 1577 return err; 1578 } 1527 if (err < 0) 1528 return err; 1579 1529 err = snd_emu10k1x_pcm(chip, 1); 1580 if (err < 0) { 1581 snd_card_free(card); 1582 return err; 1583 } 1530 if (err < 0) 1531 return err; 1584 1532 err = snd_emu10k1x_pcm(chip, 2); 1585 if (err < 0) { 1586 snd_card_free(card); 1587 return err; 1588 } 1533 if (err < 0) 1534 return err; 1589 1535 1590 1536 err = snd_emu10k1x_ac97(chip); 1591 if (err < 0) { 1592 snd_card_free(card); 1593 return err; 1594 } 1537 if (err < 0) 1538 return err; 1595 1539 1596 1540 err = snd_emu10k1x_mixer(chip); 1597 if (err < 0) { 1598 snd_card_free(card); 1599 return err; 1600 } 1541 if (err < 0) 1542 return err; 1601 1543 1602 1544 err = snd_emu10k1x_midi(chip); 1603 if (err < 0) { 1604 snd_card_free(card); 1605 return err; 1606 } 1545 if (err < 0) 1546 return err; 1607 1547 1608 1548 snd_emu10k1x_proc_init(chip); … … 1614 1554 1615 1555 err = snd_card_register(card); 1616 if (err < 0) { 1617 snd_card_free(card); 1618 return err; 1619 } 1556 if (err < 0) 1557 return err; 1620 1558 1621 1559 pci_set_drvdata(pci, card); … … 1624 1562 } 1625 1563 1626 static void snd_emu10k1x_remove(struct pci_dev *pci) 1627 { 1628 snd_card_free(pci_get_drvdata(pci)); 1564 static int snd_emu10k1x_probe(struct pci_dev *pci, 1565 const struct pci_device_id *pci_id) 1566 { 1567 return snd_card_free_on_error(&pci->dev, __snd_emu10k1x_probe(pci, pci_id)); 1629 1568 } 1630 1569 … … 1641 1580 .id_table = snd_emu10k1x_ids, 1642 1581 .probe = snd_emu10k1x_probe, 1643 .remove = snd_emu10k1x_remove,1644 1582 }; 1645 1583
Note:
See TracChangeset
for help on using the changeset viewer.