echoaudio.c (b8f1f5983fbe751aa3d07d9ce7ebb0c23bf4b7e4) | echoaudio.c (b721e68bdc5b39c51bf6a1469f8d3663fbe03243) |
---|---|
1/* 2 * ALSA driver for Echoaudio soundcards. 3 * Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * --- 22 unchanged lines hidden (view full) --- 31module_param_array(id, charp, NULL, 0444); 32MODULE_PARM_DESC(id, "ID string for " ECHOCARD_NAME " soundcard."); 33module_param_array(enable, bool, NULL, 0444); 34MODULE_PARM_DESC(enable, "Enable " ECHOCARD_NAME " soundcard."); 35 36static unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999}; 37static const DECLARE_TLV_DB_SCALE(db_scale_output_gain, -12800, 100, 1); 38 | 1/* 2 * ALSA driver for Echoaudio soundcards. 3 * Copyright (C) 2003-2004 Giuliano Pochini <pochini@shiny.it> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * --- 22 unchanged lines hidden (view full) --- 31module_param_array(id, charp, NULL, 0444); 32MODULE_PARM_DESC(id, "ID string for " ECHOCARD_NAME " soundcard."); 33module_param_array(enable, bool, NULL, 0444); 34MODULE_PARM_DESC(enable, "Enable " ECHOCARD_NAME " soundcard."); 35 36static unsigned int channels_list[10] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 999999}; 37static const DECLARE_TLV_DB_SCALE(db_scale_output_gain, -12800, 100, 1); 38 |
39 40 | |
41static int get_firmware(const struct firmware **fw_entry, | 39static int get_firmware(const struct firmware **fw_entry, |
42 struct echoaudio *chip, const short fw_index) | 40 const struct firmware *frm, struct echoaudio *chip) |
43{ 44 int err; 45 char name[30]; | 41{ 42 int err; 43 char name[30]; |
46 47#ifdef CONFIG_PM 48 if (chip->fw_cache[fw_index]) { 49 DE_ACT(("firmware requested: %s is cached\n", card_fw[fw_index].data)); 50 *fw_entry = chip->fw_cache[fw_index]; 51 return 0; 52 } 53#endif 54 55 DE_ACT(("firmware requested: %s\n", card_fw[fw_index].data)); 56 snprintf(name, sizeof(name), "ea/%s", card_fw[fw_index].data); 57 err = request_firmware(fw_entry, name, pci_device(chip)); 58 if (err < 0) | 44 DE_ACT(("firmware requested: %s\n", frm->data)); 45 snprintf(name, sizeof(name), "ea/%s", frm->data); 46 if ((err = request_firmware(fw_entry, name, pci_device(chip))) < 0) |
59 snd_printk(KERN_ERR "get_firmware(): Firmware not available (%d)\n", err); | 47 snd_printk(KERN_ERR "get_firmware(): Firmware not available (%d)\n", err); |
60#ifdef CONFIG_PM 61 else 62 chip->fw_cache[fw_index] = *fw_entry; 63#endif | |
64 return err; 65} 66 | 48 return err; 49} 50 |
67 68 | |
69static void free_firmware(const struct firmware *fw_entry) 70{ | 51static void free_firmware(const struct firmware *fw_entry) 52{ |
71#ifdef CONFIG_PM 72 DE_ACT(("firmware not released (kept in cache)\n")); 73#else | |
74 release_firmware(fw_entry); 75 DE_ACT(("firmware released\n")); | 53 release_firmware(fw_entry); 54 DE_ACT(("firmware released\n")); |
76#endif | |
77} 78 79 80 | 55} 56 57 58 |
81static void free_firmware_cache(struct echoaudio *chip) 82{ 83#ifdef CONFIG_PM 84 int i; 85 86 for (i = 0; i < 8 ; i++) 87 if (chip->fw_cache[i]) { 88 release_firmware(chip->fw_cache[i]); 89 DE_ACT(("release_firmware(%d)\n", i)); 90 } 91 92 DE_ACT(("firmware_cache released\n")); 93#endif 94} 95 96 97 | |
98/****************************************************************************** 99 PCM interface 100******************************************************************************/ 101 102static void audiopipe_free(struct snd_pcm_runtime *runtime) 103{ 104 struct audiopipe *pipe = runtime->private_data; 105 --- 642 unchanged lines hidden (view full) --- 748 channelmask |= 1 << i; 749 snd_pcm_trigger_done(s, substream); 750 } 751 } 752 } 753 754 spin_lock(&chip->lock); 755 switch (cmd) { | 59/****************************************************************************** 60 PCM interface 61******************************************************************************/ 62 63static void audiopipe_free(struct snd_pcm_runtime *runtime) 64{ 65 struct audiopipe *pipe = runtime->private_data; 66 --- 642 unchanged lines hidden (view full) --- 709 channelmask |= 1 << i; 710 snd_pcm_trigger_done(s, substream); 711 } 712 } 713 } 714 715 spin_lock(&chip->lock); 716 switch (cmd) { |
756 case SNDRV_PCM_TRIGGER_RESUME: 757 DE_ACT(("pcm_trigger resume\n")); | |
758 case SNDRV_PCM_TRIGGER_START: 759 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 760 DE_ACT(("pcm_trigger start\n")); 761 for (i = 0; i < DSP_MAXPIPES; i++) { 762 if (channelmask & (1 << i)) { 763 pipe = chip->substream[i]->runtime->private_data; 764 switch (pipe->state) { 765 case PIPE_STATE_STOPPED: --- 7 unchanged lines hidden (view full) --- 773 case PIPE_STATE_STARTED: 774 break; 775 } 776 } 777 } 778 err = start_transport(chip, channelmask, 779 chip->pipe_cyclic_mask); 780 break; | 717 case SNDRV_PCM_TRIGGER_START: 718 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 719 DE_ACT(("pcm_trigger start\n")); 720 for (i = 0; i < DSP_MAXPIPES; i++) { 721 if (channelmask & (1 << i)) { 722 pipe = chip->substream[i]->runtime->private_data; 723 switch (pipe->state) { 724 case PIPE_STATE_STOPPED: --- 7 unchanged lines hidden (view full) --- 732 case PIPE_STATE_STARTED: 733 break; 734 } 735 } 736 } 737 err = start_transport(chip, channelmask, 738 chip->pipe_cyclic_mask); 739 break; |
781 case SNDRV_PCM_TRIGGER_SUSPEND: 782 DE_ACT(("pcm_trigger suspend\n")); | |
783 case SNDRV_PCM_TRIGGER_STOP: 784 DE_ACT(("pcm_trigger stop\n")); 785 for (i = 0; i < DSP_MAXPIPES; i++) { 786 if (channelmask & (1 << i)) { 787 pipe = chip->substream[i]->runtime->private_data; 788 pipe->state = PIPE_STATE_STOPPED; 789 } 790 } --- 1068 unchanged lines hidden (view full) --- 1859 st = service_irq(chip); 1860 if (st < 0) { 1861 spin_unlock(&chip->lock); 1862 return IRQ_NONE; 1863 } 1864 /* The hardware doesn't tell us which substream caused the irq, 1865 thus we have to check all running substreams. */ 1866 for (ss = 0; ss < DSP_MAXPIPES; ss++) { | 740 case SNDRV_PCM_TRIGGER_STOP: 741 DE_ACT(("pcm_trigger stop\n")); 742 for (i = 0; i < DSP_MAXPIPES; i++) { 743 if (channelmask & (1 << i)) { 744 pipe = chip->substream[i]->runtime->private_data; 745 pipe->state = PIPE_STATE_STOPPED; 746 } 747 } --- 1068 unchanged lines hidden (view full) --- 1816 st = service_irq(chip); 1817 if (st < 0) { 1818 spin_unlock(&chip->lock); 1819 return IRQ_NONE; 1820 } 1821 /* The hardware doesn't tell us which substream caused the irq, 1822 thus we have to check all running substreams. */ 1823 for (ss = 0; ss < DSP_MAXPIPES; ss++) { |
1867 if ((substream = chip->substream[ss])) { | 1824 substream = chip->substream[ss]; 1825 if (substream && ((struct audiopipe *)substream->runtime-> 1826 private_data)->state == PIPE_STATE_STARTED) { |
1868 period = pcm_pointer(substream) / 1869 substream->runtime->period_size; 1870 if (period != chip->last_period[ss]) { 1871 chip->last_period[ss] = period; 1872 spin_unlock(&chip->lock); 1873 snd_pcm_period_elapsed(substream); 1874 spin_lock(&chip->lock); 1875 } --- 36 unchanged lines hidden (view full) --- 1912 if (chip->iores) 1913 release_and_free_resource(chip->iores); 1914 1915 DE_INIT(("MMIO freed.\n")); 1916 1917 pci_disable_device(chip->pci); 1918 1919 /* release chip data */ | 1827 period = pcm_pointer(substream) / 1828 substream->runtime->period_size; 1829 if (period != chip->last_period[ss]) { 1830 chip->last_period[ss] = period; 1831 spin_unlock(&chip->lock); 1832 snd_pcm_period_elapsed(substream); 1833 spin_lock(&chip->lock); 1834 } --- 36 unchanged lines hidden (view full) --- 1871 if (chip->iores) 1872 release_and_free_resource(chip->iores); 1873 1874 DE_INIT(("MMIO freed.\n")); 1875 1876 pci_disable_device(chip->pci); 1877 1878 /* release chip data */ |
1920 free_firmware_cache(chip); | |
1921 kfree(chip); 1922 DE_INIT(("Chip freed.\n")); 1923 return 0; 1924} 1925 1926 1927 1928static int snd_echo_dev_free(struct snd_device *device) --- 21 unchanged lines hidden (view full) --- 1950 *rchip = NULL; 1951 1952 pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0xC0); 1953 1954 if ((err = pci_enable_device(pci)) < 0) 1955 return err; 1956 pci_set_master(pci); 1957 | 1879 kfree(chip); 1880 DE_INIT(("Chip freed.\n")); 1881 return 0; 1882} 1883 1884 1885 1886static int snd_echo_dev_free(struct snd_device *device) --- 21 unchanged lines hidden (view full) --- 1908 *rchip = NULL; 1909 1910 pci_write_config_byte(pci, PCI_LATENCY_TIMER, 0xC0); 1911 1912 if ((err = pci_enable_device(pci)) < 0) 1913 return err; 1914 pci_set_master(pci); 1915 |
1958 /* Allocate chip if needed */ 1959 if (!*rchip) { 1960 chip = kzalloc(sizeof(*chip), GFP_KERNEL); 1961 if (!chip) { 1962 pci_disable_device(pci); 1963 return -ENOMEM; 1964 } 1965 DE_INIT(("chip=%p\n", chip)); 1966 spin_lock_init(&chip->lock); 1967 chip->card = card; 1968 chip->pci = pci; 1969 chip->irq = -1; 1970 atomic_set(&chip->opencount, 0); 1971 mutex_init(&chip->mode_mutex); 1972 chip->can_set_rate = 1; 1973 } else { 1974 /* If this was called from the resume function, chip is 1975 * already allocated and it contains current card settings. 1976 */ 1977 chip = *rchip; | 1916 /* allocate a chip-specific data */ 1917 chip = kzalloc(sizeof(*chip), GFP_KERNEL); 1918 if (!chip) { 1919 pci_disable_device(pci); 1920 return -ENOMEM; |
1978 } | 1921 } |
1922 DE_INIT(("chip=%p\n", chip)); |
|
1979 | 1923 |
1924 spin_lock_init(&chip->lock); 1925 chip->card = card; 1926 chip->pci = pci; 1927 chip->irq = -1; 1928 |
|
1980 /* PCI resource allocation */ 1981 chip->dsp_registers_phys = pci_resource_start(pci, 0); 1982 sz = pci_resource_len(pci, 0); 1983 if (sz > PAGE_SIZE) 1984 sz = PAGE_SIZE; /* We map only the required part */ 1985 1986 if ((chip->iores = request_mem_region(chip->dsp_registers_phys, sz, 1987 ECHOCARD_NAME)) == NULL) { --- 22 unchanged lines hidden (view full) --- 2010 snd_echo_free(chip); 2011 snd_printk(KERN_ERR "cannot allocate the comm page\n"); 2012 return -ENOMEM; 2013 } 2014 chip->comm_page_phys = chip->commpage_dma_buf.addr; 2015 chip->comm_page = (struct comm_page *)chip->commpage_dma_buf.area; 2016 2017 err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device); | 1929 /* PCI resource allocation */ 1930 chip->dsp_registers_phys = pci_resource_start(pci, 0); 1931 sz = pci_resource_len(pci, 0); 1932 if (sz > PAGE_SIZE) 1933 sz = PAGE_SIZE; /* We map only the required part */ 1934 1935 if ((chip->iores = request_mem_region(chip->dsp_registers_phys, sz, 1936 ECHOCARD_NAME)) == NULL) { --- 22 unchanged lines hidden (view full) --- 1959 snd_echo_free(chip); 1960 snd_printk(KERN_ERR "cannot allocate the comm page\n"); 1961 return -ENOMEM; 1962 } 1963 chip->comm_page_phys = chip->commpage_dma_buf.addr; 1964 chip->comm_page = (struct comm_page *)chip->commpage_dma_buf.area; 1965 1966 err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device); |
2018 if (err >= 0) 2019 err = set_mixer_defaults(chip); 2020 if (err < 0) { | 1967 if (err) { |
2021 DE_INIT(("init_hw err=%d\n", err)); 2022 snd_echo_free(chip); 2023 return err; 2024 } 2025 DE_INIT(("Card init OK\n")); 2026 2027 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 2028 snd_echo_free(chip); 2029 return err; 2030 } | 1968 DE_INIT(("init_hw err=%d\n", err)); 1969 snd_echo_free(chip); 1970 return err; 1971 } 1972 DE_INIT(("Card init OK\n")); 1973 1974 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { 1975 snd_echo_free(chip); 1976 return err; 1977 } |
1978 atomic_set(&chip->opencount, 0); 1979 mutex_init(&chip->mode_mutex); 1980 chip->can_set_rate = 1; |
|
2031 *rchip = chip; 2032 /* Init done ! */ 2033 return 0; 2034} 2035 2036 2037 2038/* constructor */ --- 16 unchanged lines hidden (view full) --- 2055 DE_INIT(("Echoaudio driver starting...\n")); 2056 i = 0; 2057 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); 2058 if (err < 0) 2059 return err; 2060 2061 snd_card_set_dev(card, &pci->dev); 2062 | 1981 *rchip = chip; 1982 /* Init done ! */ 1983 return 0; 1984} 1985 1986 1987 1988/* constructor */ --- 16 unchanged lines hidden (view full) --- 2005 DE_INIT(("Echoaudio driver starting...\n")); 2006 i = 0; 2007 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); 2008 if (err < 0) 2009 return err; 2010 2011 snd_card_set_dev(card, &pci->dev); 2012 |
2063 chip = NULL; /* Tells snd_echo_create to allocate chip */ | |
2064 if ((err = snd_echo_create(card, pci, &chip)) < 0) { 2065 snd_card_free(card); 2066 return err; 2067 } 2068 2069 strcpy(card->driver, "Echo_" ECHOCARD_NAME); 2070 strcpy(card->shortname, chip->card_name); 2071 --- 123 unchanged lines hidden (view full) --- 2195ctl_error: 2196 snd_printk(KERN_ERR "new control error %d\n", err); 2197 snd_card_free(card); 2198 return err; 2199} 2200 2201 2202 | 2013 if ((err = snd_echo_create(card, pci, &chip)) < 0) { 2014 snd_card_free(card); 2015 return err; 2016 } 2017 2018 strcpy(card->driver, "Echo_" ECHOCARD_NAME); 2019 strcpy(card->shortname, chip->card_name); 2020 --- 123 unchanged lines hidden (view full) --- 2144ctl_error: 2145 snd_printk(KERN_ERR "new control error %d\n", err); 2146 snd_card_free(card); 2147 return err; 2148} 2149 2150 2151 |
2203#if defined(CONFIG_PM) 2204 2205static int snd_echo_suspend(struct pci_dev *pci, pm_message_t state) 2206{ 2207 struct echoaudio *chip = pci_get_drvdata(pci); 2208 2209 DE_INIT(("suspend start\n")); 2210 snd_pcm_suspend_all(chip->analog_pcm); 2211 snd_pcm_suspend_all(chip->digital_pcm); 2212 2213#ifdef ECHOCARD_HAS_MIDI 2214 /* This call can sleep */ 2215 if (chip->midi_out) 2216 snd_echo_midi_output_trigger(chip->midi_out, 0); 2217#endif 2218 spin_lock_irq(&chip->lock); 2219 if (wait_handshake(chip)) { 2220 spin_unlock_irq(&chip->lock); 2221 return -EIO; 2222 } 2223 clear_handshake(chip); 2224 if (send_vector(chip, DSP_VC_GO_COMATOSE) < 0) { 2225 spin_unlock_irq(&chip->lock); 2226 return -EIO; 2227 } 2228 spin_unlock_irq(&chip->lock); 2229 2230 chip->dsp_code = NULL; 2231 free_irq(chip->irq, chip); 2232 chip->irq = -1; 2233 pci_save_state(pci); 2234 pci_disable_device(pci); 2235 2236 DE_INIT(("suspend done\n")); 2237 return 0; 2238} 2239 2240 2241 2242static int snd_echo_resume(struct pci_dev *pci) 2243{ 2244 struct echoaudio *chip = pci_get_drvdata(pci); 2245 struct comm_page *commpage, *commpage_bak; 2246 u32 pipe_alloc_mask; 2247 int err; 2248 2249 DE_INIT(("resume start\n")); 2250 pci_restore_state(pci); 2251 commpage_bak = kmalloc(sizeof(struct echoaudio), GFP_KERNEL); 2252 commpage = chip->comm_page; 2253 memcpy(commpage_bak, commpage, sizeof(struct comm_page)); 2254 2255 err = init_hw(chip, chip->pci->device, chip->pci->subsystem_device); 2256 if (err < 0) { 2257 kfree(commpage_bak); 2258 DE_INIT(("resume init_hw err=%d\n", err)); 2259 snd_echo_free(chip); 2260 return err; 2261 } 2262 DE_INIT(("resume init OK\n")); 2263 2264 /* Temporarily set chip->pipe_alloc_mask=0 otherwise 2265 * restore_dsp_settings() fails. 2266 */ 2267 pipe_alloc_mask = chip->pipe_alloc_mask; 2268 chip->pipe_alloc_mask = 0; 2269 err = restore_dsp_rettings(chip); 2270 chip->pipe_alloc_mask = pipe_alloc_mask; 2271 if (err < 0) { 2272 kfree(commpage_bak); 2273 return err; 2274 } 2275 DE_INIT(("resume restore OK\n")); 2276 2277 memcpy(&commpage->audio_format, &commpage_bak->audio_format, 2278 sizeof(commpage->audio_format)); 2279 memcpy(&commpage->sglist_addr, &commpage_bak->sglist_addr, 2280 sizeof(commpage->sglist_addr)); 2281 memcpy(&commpage->midi_output, &commpage_bak->midi_output, 2282 sizeof(commpage->midi_output)); 2283 kfree(commpage_bak); 2284 2285 if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED, 2286 ECHOCARD_NAME, chip)) { 2287 snd_echo_free(chip); 2288 snd_printk(KERN_ERR "cannot grab irq\n"); 2289 return -EBUSY; 2290 } 2291 chip->irq = pci->irq; 2292 DE_INIT(("resume irq=%d\n", chip->irq)); 2293 2294#ifdef ECHOCARD_HAS_MIDI 2295 if (chip->midi_input_enabled) 2296 enable_midi_input(chip, TRUE); 2297 if (chip->midi_out) 2298 snd_echo_midi_output_trigger(chip->midi_out, 1); 2299#endif 2300 2301 DE_INIT(("resume done\n")); 2302 return 0; 2303} 2304 2305#endif /* CONFIG_PM */ 2306 2307 2308 | |
2309static void __devexit snd_echo_remove(struct pci_dev *pci) 2310{ 2311 struct echoaudio *chip; 2312 2313 chip = pci_get_drvdata(pci); 2314 if (chip) 2315 snd_card_free(chip->card); 2316 pci_set_drvdata(pci, NULL); --- 6 unchanged lines hidden (view full) --- 2323******************************************************************************/ 2324 2325/* pci_driver definition */ 2326static struct pci_driver driver = { 2327 .name = "Echoaudio " ECHOCARD_NAME, 2328 .id_table = snd_echo_ids, 2329 .probe = snd_echo_probe, 2330 .remove = __devexit_p(snd_echo_remove), | 2152static void __devexit snd_echo_remove(struct pci_dev *pci) 2153{ 2154 struct echoaudio *chip; 2155 2156 chip = pci_get_drvdata(pci); 2157 if (chip) 2158 snd_card_free(chip->card); 2159 pci_set_drvdata(pci, NULL); --- 6 unchanged lines hidden (view full) --- 2166******************************************************************************/ 2167 2168/* pci_driver definition */ 2169static struct pci_driver driver = { 2170 .name = "Echoaudio " ECHOCARD_NAME, 2171 .id_table = snd_echo_ids, 2172 .probe = snd_echo_probe, 2173 .remove = __devexit_p(snd_echo_remove), |
2331#ifdef CONFIG_PM 2332 .suspend = snd_echo_suspend, 2333 .resume = snd_echo_resume, 2334#endif /* CONFIG_PM */ | |
2335}; 2336 2337 2338 2339/* initialization of the module */ 2340static int __init alsa_card_echo_init(void) 2341{ 2342 return pci_register_driver(&driver); --- 13 unchanged lines hidden --- | 2174}; 2175 2176 2177 2178/* initialization of the module */ 2179static int __init alsa_card_echo_init(void) 2180{ 2181 return pci_register_driver(&driver); --- 13 unchanged lines hidden --- |