Changeset 717 for GPL/trunk/alsa-kernel/pci/emu10k1
- Timestamp:
- Aug 7, 2022, 6:11:12 PM (3 years ago)
- Location:
- GPL/trunk
- Files:
-
- 5 edited
-
. (modified) (1 prop)
-
alsa-kernel/pci/emu10k1/emu10k1.c (modified) (5 diffs)
-
alsa-kernel/pci/emu10k1/emu10k1_main.c (modified) (15 diffs)
-
alsa-kernel/pci/emu10k1/emu10k1x.c (modified) (15 diffs)
-
alsa-kernel/pci/emu10k1/p16v.c (modified) (4 diffs)
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/emu10k1.c
r703 r717 114 114 } 115 115 116 err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 117 0, &card); 118 if (err < 0) 119 return err; 116 err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE, 117 sizeof(*emu), &card); 118 if (err < 0) 119 return err; 120 emu = card->private_data; 121 120 122 if (max_buffer_size[dev] < 32) 121 123 max_buffer_size[dev] = 32; … … 124 126 err = snd_emu10k1_create(card, pci, extin[dev], extout[dev], 125 127 (long)max_buffer_size[dev] * 1024 * 1024, 126 enable_ir[dev], subsystem[dev], 127 &emu); 128 if (err < 0) 129 goto error; 130 card->private_data = emu; 128 enable_ir[dev], subsystem[dev]); 129 if (err < 0) 130 return err; 131 131 emu->delay_pcm_irq = delay_pcm_irq[dev] & 0x1f; 132 132 err = snd_emu10k1_pcm(emu, 0); 133 133 if (err < 0) 134 goto error;134 return err; 135 135 err = snd_emu10k1_pcm_mic(emu, 1); 136 136 if (err < 0) 137 goto error;137 return err; 138 138 err = snd_emu10k1_pcm_efx(emu, 2); 139 139 if (err < 0) 140 goto error;140 return err; 141 141 /* This stores the periods table. */ 142 142 if (emu->card_capabilities->ca0151_chip) { /* P16V */ 143 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, &pci->dev, 144 1024, &emu->p16v_buffer); 145 if (err < 0) 146 goto error; 147 } 148 143 emu->p16v_buffer = 144 snd_devm_alloc_pages(&pci->dev, SNDRV_DMA_TYPE_DEV, 1024); 145 if (!emu->p16v_buffer) 146 return -ENOMEM; 147 } 149 148 err = snd_emu10k1_mixer(emu, 0, 3); 150 149 if (err < 0) 151 goto error;150 return err; 152 151 153 152 err = snd_emu10k1_timer(emu, 0); 154 153 if (err < 0) 155 goto error;154 return err; 156 155 157 156 err = snd_emu10k1_pcm_multi(emu, 3); 158 157 if (err < 0) 159 goto error;158 return err; 160 159 if (emu->card_capabilities->ca0151_chip) { /* P16V */ 161 160 err = snd_p16v_pcm(emu, 4); 162 161 if (err < 0) 163 goto error;162 return err; 164 163 } 165 164 if (emu->audigy) { 166 165 err = snd_emu10k1_audigy_midi(emu); 167 166 if (err < 0) 168 goto error;167 return err; 169 168 } else { 170 169 err = snd_emu10k1_midi(emu); 171 170 if (err < 0) 172 goto error;171 return err; 173 172 } 174 173 err = snd_emu10k1_fx8010_new(emu, 0); 175 174 if (err < 0) 176 goto error;175 return err; 177 176 #ifdef ENABLE_SYNTH 178 177 if (snd_seq_device_new(card, 1, SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, … … 202 201 err = snd_card_register(card); 203 202 if (err < 0) 204 goto error;203 return err; 205 204 206 205 if (emu->card_capabilities->emu_model) … … 210 209 dev++; 211 210 return 0; 212 213 error:214 snd_card_free(card);215 return err;216 211 } 217 218 static void snd_card_emu10k1_remove(struct pci_dev *pci)219 {220 snd_card_free(pci_get_drvdata(pci));221 }222 223 212 224 213 #ifdef CONFIG_PM_SLEEP … … 278 267 .id_table = snd_emu10k1_ids, 279 268 .probe = snd_card_emu10k1_probe, 280 .remove = snd_card_emu10k1_remove,281 269 .driver = { 282 270 .pm = SND_EMU10K1_PM_OPS, -
GPL/trunk/alsa-kernel/pci/emu10k1/emu10k1_main.c
r695 r717 1252 1252 #endif 1253 1253 1254 static int snd_emu10k1_free(struct snd_emu10k1 *emu)1254 static void snd_emu10k1_free(struct snd_card *card) 1255 1255 { 1256 struct snd_emu10k1 *emu = card->private_data; 1257 1256 1258 if (emu->port) { /* avoid access to already used hardware */ 1257 1259 snd_emu10k1_fx8010_tram_setup(emu, 0); … … 1266 1268 release_firmware(emu->firmware); 1267 1269 release_firmware(emu->dock_fw); 1268 if (emu->irq >= 0)1269 free_irq(emu->irq, emu);1270 1270 snd_util_memhdr_free(emu->memhdr); 1271 1271 if (emu->silent_page.area) … … 1278 1278 free_pm_buffer(emu); 1279 1279 #endif 1280 if (emu->port)1281 pci_release_regions(emu->pci);1282 if (emu->card_capabilities->ca0151_chip) /* P16V */1283 snd_p16v_free(emu);1284 pci_disable_device(emu->pci);1285 kfree(emu);1286 return 0;1287 }1288 1289 static int snd_emu10k1_dev_free(struct snd_device *device)1290 {1291 struct snd_emu10k1 *emu = device->device_data;1292 return snd_emu10k1_free(emu);1293 1280 } 1294 1281 … … 1792 1779 long max_cache_bytes, 1793 1780 int enable_ir, 1794 uint subsystem, 1795 struct snd_emu10k1 **remu) 1781 uint subsystem) 1796 1782 { 1797 struct snd_emu10k1 *emu ;1783 struct snd_emu10k1 *emu = card->private_data; 1798 1784 int idx, err; 1799 1785 int is_audigy; … … 1802 1788 unsigned int silent_page; 1803 1789 const struct snd_emu_chip_details *c; 1804 static const struct snd_device_ops ops = {1805 .dev_free = snd_emu10k1_dev_free,1806 };1807 1808 *remu = NULL;1809 1790 1810 1791 /* enable PCI device */ 1811 err = pci _enable_device(pci);1792 err = pcim_enable_device(pci); 1812 1793 if (err < 0) 1813 1794 return err; 1814 1795 1815 emu = kzalloc(sizeof(*emu), GFP_KERNEL); 1816 if (emu == NULL) { 1817 pci_disable_device(pci); 1818 return -ENOMEM; 1819 } 1796 card->private_free = snd_emu10k1_free; 1820 1797 emu->card = card; 1821 1798 spin_lock_init(&emu->reg_lock); … … 1864 1841 if (c->vendor == 0) { 1865 1842 dev_err(card->dev, "emu10k1: Card not recognised\n"); 1866 kfree(emu);1867 pci_disable_device(pci);1868 1843 return -ENOENT; 1869 1844 } … … 1897 1872 "architecture does not support PCI busmaster DMA with mask 0x%lx\n", 1898 1873 emu->dma_mask); 1899 kfree(emu);1900 pci_disable_device(pci);1901 1874 return -ENXIO; 1902 1875 } … … 1907 1880 1908 1881 err = pci_request_regions(pci, "EMU10K1"); 1909 if (err < 0) { 1910 kfree(emu); 1911 pci_disable_device(pci); 1882 if (err < 0) 1912 1883 return err; 1913 }1914 1884 emu->port = pci_resource_start(pci, 0); 1915 1885 … … 1919 1889 MAXPAGES0); 1920 1890 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size, 1921 &emu->ptb_pages) < 0) { 1922 err = -ENOMEM; 1923 goto error; 1924 } 1891 &emu->ptb_pages) < 0) 1892 return -ENOMEM; 1925 1893 dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n", 1926 1894 (unsigned long)emu->ptb_pages.addr, … … 1937 1905 sizeof(unsigned long)); 1938 1906 #endif 1939 if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) { 1940 err = -ENOMEM; 1941 goto error; 1942 } 1907 1908 if (!emu->page_ptr_table || !emu->page_addr_table) 1909 return -ENOMEM; 1943 1910 1944 1911 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE, 1945 &emu->silent_page) < 0) { 1946 err = -ENOMEM; 1947 goto error; 1948 } 1912 &emu->silent_page) < 0) 1913 return -ENOMEM; 1949 1914 dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n", 1950 1915 (unsigned long)emu->silent_page.addr, … … 1953 1918 1954 1919 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE); 1955 if (emu->memhdr == NULL) { 1956 err = -ENOMEM; 1957 goto error; 1958 } 1920 if (!emu->memhdr) 1921 return -ENOMEM; 1959 1922 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) - 1960 1923 sizeof(struct snd_util_memblk); … … 1974 1937 err = snd_emu10k1_cardbus_init(emu); 1975 1938 if (err < 0) 1976 goto error;1939 return err; 1977 1940 } 1978 1941 if (emu->card_capabilities->ecard) { 1979 1942 err = snd_emu10k1_ecard_init(emu); 1980 1943 if (err < 0) 1981 goto error;1944 return err; 1982 1945 } else if (emu->card_capabilities->emu_model) { 1983 1946 err = snd_emu10k1_emu1010_init(emu); 1984 if (err < 0) { 1985 snd_emu10k1_free(emu); 1947 if (err < 0) 1986 1948 return err; 1987 }1988 1949 } else { 1989 1950 /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version … … 1999 1960 2000 1961 /* irq handler must be registered after I/O ports are activated */ 2001 if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED, 2002 KBUILD_MODNAME, emu)) { 2003 err = -EBUSY; 2004 goto error; 2005 } 1962 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1_interrupt, 1963 IRQF_SHARED, KBUILD_MODNAME, emu)) 1964 return -EBUSY; 2006 1965 emu->irq = pci->irq; 2007 1966 card->sync_irq = emu->irq; … … 2042 2001 err = snd_emu10k1_init(emu, enable_ir, 0); 2043 2002 if (err < 0) 2044 goto error;2003 return err; 2045 2004 #ifdef CONFIG_PM_SLEEP 2046 2005 err = alloc_pm_buffer(emu); 2047 2006 if (err < 0) 2048 goto error;2007 return err; 2049 2008 #endif 2050 2009 … … 2052 2011 err = snd_emu10k1_init_efx(emu); 2053 2012 if (err < 0) 2054 goto error;2013 return err; 2055 2014 snd_emu10k1_audio_enable(emu); 2056 2057 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops);2058 if (err < 0)2059 goto error;2060 2015 2061 2016 #ifdef CONFIG_SND_PROC_FS 2062 2017 snd_emu10k1_proc_init(emu); 2063 2018 #endif 2064 2065 *remu = emu;2066 2019 return 0; 2067 2068 error:2069 snd_emu10k1_free(emu);2070 return err;2071 2020 } 2072 2021 -
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 const struct pci_device_id *pci_id)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 -
GPL/trunk/alsa-kernel/pci/emu10k1/p16v.c
r703 r717 291 291 struct snd_pcm_runtime *runtime = substream->runtime; 292 292 int channel = substream->pcm->device - emu->p16v_device_offset; 293 u32 *table_base = (u32 *)(emu->p16v_buffer .area+(8*16*channel));293 u32 *table_base = (u32 *)(emu->p16v_buffer->area+(8*16*channel)); 294 294 u32 period_size_bytes = frames_to_bytes(runtime, runtime->period_size); 295 295 int i; … … 309 309 dev_dbg(emu->card->dev, 310 310 "dma_addr=%x, dma_area=%p, dma_bytes(size)=%x\n", 311 emu->p16v_buffer .addr, emu->p16v_buffer.area,312 emu->p16v_buffer .bytes);311 emu->p16v_buffer->addr, emu->p16v_buffer->area, 312 emu->p16v_buffer->bytes); 313 313 #endif /* debug */ 314 314 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel); … … 334 334 } 335 335 336 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_ADDR, channel, emu->p16v_buffer .addr+(8*16*channel));336 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_ADDR, channel, emu->p16v_buffer->addr+(8*16*channel)); 337 337 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_SIZE, channel, (runtime->periods - 1) << 19); 338 338 snd_emu10k1_ptr20_write(emu, PLAYBACK_LIST_PTR, channel, 0); … … 567 567 .pointer = snd_p16v_pcm_pointer_capture, 568 568 }; 569 570 571 int snd_p16v_free(struct snd_emu10k1 *chip)572 {573 // release the data574 if (chip->p16v_buffer.area) {575 snd_dma_free_pages(&chip->p16v_buffer);576 /*577 dev_dbg(chip->card->dev, "period lables free: %p\n",578 &chip->p16v_buffer);579 */580 }581 return 0;582 }583 569 584 570 int snd_p16v_pcm(struct snd_emu10k1 *emu, int device)
Note:
See TracChangeset
for help on using the changeset viewer.
