Changeset 717 for GPL/trunk/alsa-kernel/pci/ens1370.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/ens1370.c
r703 r717 418 418 419 419 #ifdef CHIP1370 420 struct snd_dma_buffer dma_bug;420 struct snd_dma_buffer *dma_bug; 421 421 #endif 422 422 … … 1876 1876 */ 1877 1877 1878 static int snd_ensoniq_free(struct ensoniq *ensoniq) 1879 { 1878 static void snd_ensoniq_free(struct snd_card *card) 1879 { 1880 struct ensoniq *ensoniq = card->private_data; 1881 1880 1882 snd_ensoniq_free_gameport(ensoniq); 1881 if (ensoniq->irq < 0)1882 goto __hw_end;1883 1883 #ifdef CHIP1370 1884 1884 outl(ES_1370_SERR_DISABLE, ES_REG(ensoniq, CONTROL)); /* switch everything off */ … … 1888 1888 outl(0, ES_REG(ensoniq, SERIAL)); /* clear serial interface */ 1889 1889 #endif 1890 pci_set_power_state(ensoniq->pci, PCI_D3hot);1891 __hw_end:1892 #ifdef CHIP13701893 if (ensoniq->dma_bug.area)1894 snd_dma_free_pages(&ensoniq->dma_bug);1895 #endif1896 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);1908 1890 } 1909 1891 … … 1939 1921 outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL)); 1940 1922 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)); 1942 1924 outl(0, ES_REG(ensoniq, PHANTOM_COUNT)); 1943 1925 #else … … 2036 2018 2037 2019 static 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; 2042 2023 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); 2049 2026 if (err < 0) 2050 2027 return err; 2051 ensoniq = kzalloc(sizeof(*ensoniq), GFP_KERNEL);2052 if (ensoniq == NULL) {2053 pci_disable_device(pci);2054 return -ENOMEM;2055 }2056 2028 spin_lock_init(&ensoniq->reg_lock); 2057 2029 mutex_init(&ensoniq->src_mutex); … … 2060 2032 ensoniq->irq = -1; 2061 2033 err = pci_request_regions(pci, "Ensoniq AudioPCI"); 2062 if (err < 0) { 2063 kfree(ensoniq); 2064 pci_disable_device(pci); 2034 if (err < 0) 2065 2035 return err; 2066 }2067 2036 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 2068 2044 if (request_irq(pci->irq, snd_audiopci_interrupt, IRQF_SHARED, 2069 2045 KBUILD_MODNAME, ensoniq)) { 2070 2046 dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq); 2071 snd_ensoniq_free( ensoniq);2047 snd_ensoniq_free(card); 2072 2048 return -EBUSY; 2073 2049 } 2050 #endif 2074 2051 ensoniq->irq = pci->irq; 2075 2052 card->sync_irq = ensoniq->irq; 2076 2053 #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; 2083 2058 #endif 2084 2059 pci_set_master(pci); … … 2107 2082 #endif 2108 2083 2084 card->private_free = snd_ensoniq_free; 2109 2085 snd_ensoniq_chip_init(ensoniq); 2110 2086 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 2117 2087 snd_ensoniq_proc_init(ensoniq); 2118 2119 *rensoniq = ensoniq;2120 2088 return 0; 2121 2089 } … … 2353 2321 } 2354 2322 2355 static int snd_audiopci_probe(struct pci_dev *pci,2356 2323 static int __snd_audiopci_probe(struct pci_dev *pci, 2324 const struct pci_device_id *pci_id) 2357 2325 { 2358 2326 static int dev; … … 2368 2336 } 2369 2337 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); 2372 2340 if (err < 0) 2373 2341 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) 2378 2346 return err; 2379 }2380 card->private_data = ensoniq;2381 2347 2382 2348 #ifdef CHIP1370 2383 2349 err = snd_ensoniq_1370_mixer(ensoniq); 2384 if (err < 0) { 2385 snd_card_free(card); 2350 if (err < 0) 2386 2351 return err; 2387 }2388 2352 #endif 2389 2353 #ifdef CHIP1371 2390 2354 err = snd_ensoniq_1371_mixer(ensoniq, spdif[dev], lineio[dev]); 2391 if (err < 0) { 2392 snd_card_free(card); 2355 if (err < 0) 2393 2356 return err; 2394 }2395 2357 #endif 2396 2358 err = snd_ensoniq_pcm(ensoniq, 0); 2397 if (err < 0) { 2398 snd_card_free(card); 2359 if (err < 0) 2399 2360 return err; 2400 }2401 2361 err = snd_ensoniq_pcm2(ensoniq, 1); 2402 if (err < 0) { 2403 snd_card_free(card); 2362 if (err < 0) 2404 2363 return err; 2405 }2406 2364 err = snd_ensoniq_midi(ensoniq, 0); 2407 if (err < 0) { 2408 snd_card_free(card); 2365 if (err < 0) 2409 2366 return err; 2410 }2411 2367 2412 2368 snd_ensoniq_create_gameport(ensoniq, dev); … … 2422 2378 2423 2379 err = snd_card_register(card); 2424 if (err < 0) { 2425 snd_card_free(card); 2380 if (err < 0) 2426 2381 return err; 2427 }2428 2382 2429 2383 pci_set_drvdata(pci, card); … … 2432 2386 } 2433 2387 2434 static void snd_audiopci_remove(struct pci_dev *pci) 2435 { 2436 snd_card_free(pci_get_drvdata(pci)); 2388 static 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)); 2437 2392 } 2438 2393 … … 2441 2396 .id_table = snd_audiopci_ids, 2442 2397 .probe = snd_audiopci_probe, 2443 .remove = snd_audiopci_remove,2444 2398 .driver = { 2445 2399 .pm = SND_ENSONIQ_PM_OPS,
Note:
See TracChangeset
for help on using the changeset viewer.