main.c 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471
  1. /*
  2. **********************************************************************
  3. * main.c - Creative EMU10K1 audio driver
  4. * Copyright 1999, 2000 Creative Labs, Inc.
  5. *
  6. **********************************************************************
  7. *
  8. * Date Author Summary of changes
  9. * ---- ------ ------------------
  10. * October 20, 1999 Bertrand Lee base code release
  11. * November 2, 1999 Alan Cox cleaned up stuff
  12. *
  13. **********************************************************************
  14. *
  15. * This program is free software; you can redistribute it and/or
  16. * modify it under the terms of the GNU General Public License as
  17. * published by the Free Software Foundation; either version 2 of
  18. * the License, or (at your option) any later version.
  19. *
  20. * This program is distributed in the hope that it will be useful,
  21. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  23. * GNU General Public License for more details.
  24. *
  25. * You should have received a copy of the GNU General Public
  26. * License along with this program; if not, write to the Free
  27. * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  28. * USA.
  29. *
  30. **********************************************************************
  31. *
  32. * Supported devices:
  33. * /dev/dsp: Standard /dev/dsp device, OSS-compatible
  34. * /dev/dsp1: Routes to rear speakers only
  35. * /dev/mixer: Standard /dev/mixer device, OSS-compatible
  36. * /dev/midi: Raw MIDI UART device, mostly OSS-compatible
  37. * /dev/sequencer: Sequencer Interface (requires sound.o)
  38. *
  39. * Revision history:
  40. * 0.1 beta Initial release
  41. * 0.2 Lowered initial mixer vol. Improved on stuttering wave playback. Added MIDI UART support.
  42. * 0.3 Fixed mixer routing bug, added APS, joystick support.
  43. * 0.4 Added rear-channel, SPDIF support.
  44. * 0.5 Source cleanup, SMP fixes, multiopen support, 64 bit arch fixes,
  45. * moved bh's to tasklets, moved to the new PCI driver initialization style.
  46. * 0.6 Make use of pci_alloc_consistent, improve compatibility layer for 2.2 kernels,
  47. * code reorganization and cleanup.
  48. * 0.7 Support for the Emu-APS. Bug fixes for voice cache setup, mmaped sound + poll().
  49. * Support for setting external TRAM size.
  50. * 0.8 Make use of the kernel ac97 interface. Support for a dsp patch manager.
  51. * 0.9 Re-enables rear speakers volume controls
  52. * 0.10 Initializes rear speaker volume.
  53. * Dynamic patch storage allocation.
  54. * New private ioctls to change control gpr values.
  55. * Enable volume control interrupts.
  56. * By default enable dsp routes to digital out.
  57. * 0.11 Fixed fx / 4 problem.
  58. * 0.12 Implemented mmaped for recording.
  59. * Fixed bug: not unreserving mmaped buffer pages.
  60. * IRQ handler cleanup.
  61. * 0.13 Fixed problem with dsp1
  62. * Simplified dsp patch writing (inside the driver)
  63. * Fixed several bugs found by the Stanford tools
  64. * 0.14 New control gpr to oss mixer mapping feature (Chris Purnell)
  65. * Added AC3 Passthrough Support (Juha Yrjola)
  66. * Added Support for 5.1 cards (digital out and the third analog out)
  67. * 0.15 Added Sequencer Support (Daniel Mack)
  68. * Support for multichannel pcm playback (Eduard Hasenleithner)
  69. * 0.16 Mixer improvements, added old treble/bass support (Daniel Bertrand)
  70. * Small code format cleanup.
  71. * Deadlock bug fix for emu10k1_volxxx_irqhandler().
  72. * 0.17 Fix for mixer SOUND_MIXER_INFO ioctl.
  73. * Fix for HIGHMEM machines (emu10k1 can only do 31 bit bus master)
  74. * midi poll initial implementation.
  75. * Small mixer fixes/cleanups.
  76. * Improved support for 5.1 cards.
  77. * 0.18 Fix for possible leak in pci_alloc_consistent()
  78. * Cleaned up poll() functions (audio and midi). Don't start input.
  79. * Restrict DMA pages used to 512Mib range.
  80. * New AC97_BOOST mixer ioctl.
  81. * 0.19a Added Support for Audigy Cards
  82. * Real fix for kernel with highmem support (cast dma_handle to u32).
  83. * Fix recording buffering parameters calculation.
  84. * Use unsigned long for variables in bit ops.
  85. * 0.20a Fixed recording startup
  86. * Fixed timer rate setting (it's a 16-bit register)
  87. * 0.21 Converted code to use pci_name() instead of accessing slot_name
  88. * directly (Eugene Teo)
  89. *********************************************************************/
  90. /* These are only included once per module */
  91. #include <linux/module.h>
  92. #include <linux/slab.h>
  93. #include <linux/init.h>
  94. #include <linux/delay.h>
  95. #include <linux/proc_fs.h>
  96. #include <linux/dma-mapping.h>
  97. #include "hwaccess.h"
  98. #include "8010.h"
  99. #include "efxmgr.h"
  100. #include "cardwo.h"
  101. #include "cardwi.h"
  102. #include "cardmo.h"
  103. #include "cardmi.h"
  104. #include "recmgr.h"
  105. #include "ecard.h"
  106. #ifdef EMU10K1_SEQUENCER
  107. #define MIDI_SYNTH_NAME "EMU10K1 MIDI"
  108. #define MIDI_SYNTH_CAPS SYNTH_CAP_INPUT
  109. #include "../sound_config.h"
  110. #include "../midi_synth.h"
  111. /* this should be in dev_table.h */
  112. #define SNDCARD_EMU10K1 46
  113. #endif
  114. /* the emu10k1 _seems_ to only supports 29 bit (512MiB) bit bus master */
  115. #define EMU10K1_DMA_MASK DMA_29BIT_MASK /* DMA buffer mask for pci_alloc_consist */
  116. #ifndef PCI_VENDOR_ID_CREATIVE
  117. #define PCI_VENDOR_ID_CREATIVE 0x1102
  118. #endif
  119. #ifndef PCI_DEVICE_ID_CREATIVE_EMU10K1
  120. #define PCI_DEVICE_ID_CREATIVE_EMU10K1 0x0002
  121. #endif
  122. #ifndef PCI_DEVICE_ID_CREATIVE_AUDIGY
  123. #define PCI_DEVICE_ID_CREATIVE_AUDIGY 0x0004
  124. #endif
  125. #define EMU_APS_SUBID 0x40011102
  126. enum {
  127. EMU10K1 = 0,
  128. AUDIGY,
  129. };
  130. static char *card_names[] __devinitdata = {
  131. "EMU10K1",
  132. "Audigy",
  133. };
  134. static struct pci_device_id emu10k1_pci_tbl[] = {
  135. {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_EMU10K1,
  136. PCI_ANY_ID, PCI_ANY_ID, 0, 0, EMU10K1},
  137. {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_AUDIGY,
  138. PCI_ANY_ID, PCI_ANY_ID, 0, 0, AUDIGY},
  139. {0,}
  140. };
  141. MODULE_DEVICE_TABLE(pci, emu10k1_pci_tbl);
  142. /* Global var instantiation */
  143. LIST_HEAD(emu10k1_devs);
  144. extern struct file_operations emu10k1_audio_fops;
  145. extern struct file_operations emu10k1_mixer_fops;
  146. extern struct file_operations emu10k1_midi_fops;
  147. #ifdef EMU10K1_SEQUENCER
  148. static struct midi_operations emu10k1_midi_operations;
  149. #endif
  150. extern irqreturn_t emu10k1_interrupt(int, void *);
  151. static int __devinit emu10k1_audio_init(struct emu10k1_card *card)
  152. {
  153. /* Assign default playback voice parameters */
  154. if (card->is_audigy)
  155. card->mchannel_fx = 0;
  156. else
  157. card->mchannel_fx = 8;
  158. if (card->is_audigy) {
  159. /* mono voice */
  160. card->waveout.send_dcba[SEND_MONO] = 0xffffffff;
  161. card->waveout.send_hgfe[SEND_MONO] = 0x0000ffff;
  162. /* stereo voice */
  163. /* left */
  164. card->waveout.send_dcba[SEND_LEFT] = 0x00ff00ff;
  165. card->waveout.send_hgfe[SEND_LEFT] = 0x00007f7f;
  166. /* right */
  167. card->waveout.send_dcba[SEND_RIGHT] = 0xff00ff00;
  168. card->waveout.send_hgfe[SEND_RIGHT] = 0x00007f7f;
  169. card->waveout.send_routing[ROUTE_PCM] = 0x03020100; // Regular pcm
  170. card->waveout.send_routing2[ROUTE_PCM] = 0x07060504;
  171. card->waveout.send_routing[ROUTE_PT] = 0x3f3f3d3c; // Passthrough
  172. card->waveout.send_routing2[ROUTE_PT] = 0x3f3f3f3f;
  173. card->waveout.send_routing[ROUTE_PCM1] = 0x03020100; // Spare
  174. card->waveout.send_routing2[ROUTE_PCM1] = 0x07060404;
  175. } else {
  176. /* mono voice */
  177. card->waveout.send_dcba[SEND_MONO] = 0x0000ffff;
  178. /* stereo voice */
  179. /* left */
  180. card->waveout.send_dcba[SEND_LEFT] = 0x000000ff;
  181. /* right */
  182. card->waveout.send_dcba[SEND_RIGHT] = 0x0000ff00;
  183. card->waveout.send_routing[ROUTE_PCM] = 0x3210; // pcm
  184. card->waveout.send_routing[ROUTE_PT] = 0x3210; // passthrough
  185. card->waveout.send_routing[ROUTE_PCM1] = 0x7654; // /dev/dsp1
  186. }
  187. /* Assign default recording parameters */
  188. /* FIXME */
  189. if (card->is_aps)
  190. card->wavein.recsrc = WAVERECORD_FX;
  191. else
  192. card->wavein.recsrc = WAVERECORD_AC97;
  193. card->wavein.fxwc = 0x0003;
  194. return 0;
  195. }
  196. static void emu10k1_audio_cleanup(struct emu10k1_card *card)
  197. {
  198. }
  199. static int __devinit emu10k1_register_devices(struct emu10k1_card *card)
  200. {
  201. card->audio_dev = register_sound_dsp(&emu10k1_audio_fops, -1);
  202. if (card->audio_dev < 0) {
  203. printk(KERN_ERR "emu10k1: cannot register first audio device!\n");
  204. goto err_dev;
  205. }
  206. card->audio_dev1 = register_sound_dsp(&emu10k1_audio_fops, -1);
  207. if (card->audio_dev1 < 0) {
  208. printk(KERN_ERR "emu10k1: cannot register second audio device!\n");
  209. goto err_dev1;
  210. }
  211. card->ac97->dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
  212. if (card->ac97->dev_mixer < 0) {
  213. printk(KERN_ERR "emu10k1: cannot register mixer device\n");
  214. goto err_mixer;
  215. }
  216. card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
  217. if (card->midi_dev < 0) {
  218. printk(KERN_ERR "emu10k1: cannot register midi device!\n");
  219. goto err_midi;
  220. }
  221. #ifdef EMU10K1_SEQUENCER
  222. card->seq_dev = sound_alloc_mididev();
  223. if (card->seq_dev == -1)
  224. printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
  225. else {
  226. std_midi_synth.midi_dev = card->seq_dev;
  227. midi_devs[card->seq_dev] =
  228. (struct midi_operations *)
  229. kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
  230. if (midi_devs[card->seq_dev] == NULL) {
  231. printk(KERN_ERR "emu10k1: unable to allocate memory!");
  232. sound_unload_mididev(card->seq_dev);
  233. card->seq_dev = -1;
  234. /* return without error */
  235. } else {
  236. memcpy((char *)midi_devs[card->seq_dev],
  237. (char *)&emu10k1_midi_operations,
  238. sizeof(struct midi_operations));
  239. midi_devs[card->seq_dev]->devc = card;
  240. sequencer_init();
  241. card->seq_mididev = NULL;
  242. }
  243. }
  244. #endif
  245. return 0;
  246. err_midi:
  247. unregister_sound_mixer(card->ac97->dev_mixer);
  248. err_mixer:
  249. unregister_sound_dsp(card->audio_dev);
  250. err_dev1:
  251. unregister_sound_dsp(card->audio_dev);
  252. err_dev:
  253. return -ENODEV;
  254. }
  255. static void emu10k1_unregister_devices(struct emu10k1_card *card)
  256. {
  257. #ifdef EMU10K1_SEQUENCER
  258. if (card->seq_dev > -1) {
  259. kfree(midi_devs[card->seq_dev]);
  260. midi_devs[card->seq_dev] = NULL;
  261. sound_unload_mididev(card->seq_dev);
  262. card->seq_dev = -1;
  263. }
  264. #endif
  265. unregister_sound_midi(card->midi_dev);
  266. unregister_sound_mixer(card->ac97->dev_mixer);
  267. unregister_sound_dsp(card->audio_dev1);
  268. unregister_sound_dsp(card->audio_dev);
  269. }
  270. static int emu10k1_info_proc (char *page, char **start, off_t off,
  271. int count, int *eof, void *data)
  272. {
  273. struct emu10k1_card *card = data;
  274. int len = 0;
  275. if (card == NULL)
  276. return -ENODEV;
  277. len += sprintf (page + len, "Driver Version : %s\n", DRIVER_VERSION);
  278. len += sprintf (page + len, "Card type : %s\n", card->is_aps ? "Aps" : (card->is_audigy ? "Audigy" : "Emu10k1"));
  279. len += sprintf (page + len, "Revision : %d\n", card->chiprev);
  280. len += sprintf (page + len, "Model : %#06x\n", card->model);
  281. len += sprintf (page + len, "IO : %#06lx-%#06lx\n", card->iobase, card->iobase + card->length - 1);
  282. len += sprintf (page + len, "IRQ : %d\n\n", card->irq);
  283. len += sprintf (page + len, "Registered /dev Entries:\n");
  284. len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev / 16);
  285. len += sprintf (page + len, "/dev/dsp%d\n", card->audio_dev1 / 16);
  286. len += sprintf (page + len, "/dev/mixer%d\n", card->ac97->dev_mixer / 16);
  287. len += sprintf (page + len, "/dev/midi%d\n", card->midi_dev / 16);
  288. #ifdef EMU10K1_SEQUENCER
  289. len += sprintf (page + len, "/dev/sequencer\n");
  290. #endif
  291. return len;
  292. }
  293. static int __devinit emu10k1_proc_init(struct emu10k1_card *card)
  294. {
  295. char s[48];
  296. if (!proc_mkdir ("driver/emu10k1", NULL)) {
  297. printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1\n");
  298. goto err_out;
  299. }
  300. sprintf(s, "driver/emu10k1/%s", pci_name(card->pci_dev));
  301. if (!proc_mkdir (s, NULL)) {
  302. printk(KERN_ERR "emu10k1: unable to create proc directory %s\n", s);
  303. goto err_emu10k1_proc;
  304. }
  305. sprintf(s, "driver/emu10k1/%s/info", pci_name(card->pci_dev));
  306. if (!create_proc_read_entry (s, 0, NULL, emu10k1_info_proc, card)) {
  307. printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
  308. goto err_dev_proc;
  309. }
  310. if (!card->is_aps) {
  311. sprintf(s, "driver/emu10k1/%s/ac97", pci_name(card->pci_dev));
  312. if (!create_proc_read_entry (s, 0, NULL, ac97_read_proc, card->ac97)) {
  313. printk(KERN_ERR "emu10k1: unable to create proc entry %s\n", s);
  314. goto err_proc_ac97;
  315. }
  316. }
  317. return 0;
  318. err_proc_ac97:
  319. sprintf(s, "driver/emu10k1/%s/info", pci_name(card->pci_dev));
  320. remove_proc_entry(s, NULL);
  321. err_dev_proc:
  322. sprintf(s, "driver/emu10k1/%s", pci_name(card->pci_dev));
  323. remove_proc_entry(s, NULL);
  324. err_emu10k1_proc:
  325. remove_proc_entry("driver/emu10k1", NULL);
  326. err_out:
  327. return -EIO;
  328. }
  329. static void emu10k1_proc_cleanup(struct emu10k1_card *card)
  330. {
  331. char s[48];
  332. if (!card->is_aps) {
  333. sprintf(s, "driver/emu10k1/%s/ac97", pci_name(card->pci_dev));
  334. remove_proc_entry(s, NULL);
  335. }
  336. sprintf(s, "driver/emu10k1/%s/info", pci_name(card->pci_dev));
  337. remove_proc_entry(s, NULL);
  338. sprintf(s, "driver/emu10k1/%s", pci_name(card->pci_dev));
  339. remove_proc_entry(s, NULL);
  340. remove_proc_entry("driver/emu10k1", NULL);
  341. }
  342. static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
  343. {
  344. struct ac97_codec *codec = ac97_alloc_codec();
  345. if(codec == NULL)
  346. {
  347. printk(KERN_ERR "emu10k1: cannot allocate mixer\n");
  348. return -EIO;
  349. }
  350. card->ac97 = codec;
  351. card->ac97->private_data = card;
  352. if (!card->is_aps) {
  353. card->ac97->id = 0;
  354. card->ac97->codec_read = emu10k1_ac97_read;
  355. card->ac97->codec_write = emu10k1_ac97_write;
  356. if (ac97_probe_codec (card->ac97) == 0) {
  357. printk(KERN_ERR "emu10k1: unable to probe AC97 codec\n");
  358. goto err_out;
  359. }
  360. /* 5.1: Enable the additional AC97 Slots and unmute extra channels on AC97 codec */
  361. if (codec->codec_read(codec, AC97_EXTENDED_ID) & 0x0080){
  362. printk(KERN_INFO "emu10k1: SBLive! 5.1 card detected\n");
  363. sblive_writeptr(card, AC97SLOT, 0, AC97SLOT_CNTR | AC97SLOT_LFE);
  364. codec->codec_write(codec, AC97_SURROUND_MASTER, 0x0);
  365. }
  366. // Force 5bit:
  367. //card->ac97->bit_resolution=5;
  368. /* these will store the original values and never be modified */
  369. card->ac97_supported_mixers = card->ac97->supported_mixers;
  370. card->ac97_stereo_mixers = card->ac97->stereo_mixers;
  371. }
  372. return 0;
  373. err_out:
  374. ac97_release_codec(card->ac97);
  375. return -EIO;
  376. }
  377. static void emu10k1_mixer_cleanup(struct emu10k1_card *card)
  378. {
  379. ac97_release_codec(card->ac97);
  380. }
  381. static int __devinit emu10k1_midi_init(struct emu10k1_card *card)
  382. {
  383. int ret;
  384. card->mpuout = kzalloc(sizeof(struct emu10k1_mpuout), GFP_KERNEL);
  385. if (card->mpuout == NULL) {
  386. printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuout: out of memory\n");
  387. ret = -ENOMEM;
  388. goto err_out1;
  389. }
  390. card->mpuout->intr = 1;
  391. card->mpuout->status = FLAGS_AVAILABLE;
  392. card->mpuout->state = CARDMIDIOUT_STATE_DEFAULT;
  393. tasklet_init(&card->mpuout->tasklet, emu10k1_mpuout_bh, (unsigned long) card);
  394. spin_lock_init(&card->mpuout->lock);
  395. card->mpuin = kzalloc(sizeof(struct emu10k1_mpuin), GFP_KERNEL);
  396. if (card->mpuin == NULL) {
  397. printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuin: out of memory\n");
  398. ret = -ENOMEM;
  399. goto err_out2;
  400. }
  401. card->mpuin->status = FLAGS_AVAILABLE;
  402. tasklet_init(&card->mpuin->tasklet, emu10k1_mpuin_bh, (unsigned long) card->mpuin);
  403. spin_lock_init(&card->mpuin->lock);
  404. /* Reset the MPU port */
  405. if (emu10k1_mpu_reset(card) < 0) {
  406. ERROR();
  407. ret = -EIO;
  408. goto err_out3;
  409. }
  410. return 0;
  411. err_out3:
  412. kfree(card->mpuin);
  413. err_out2:
  414. kfree(card->mpuout);
  415. err_out1:
  416. return ret;
  417. }
  418. static void emu10k1_midi_cleanup(struct emu10k1_card *card)
  419. {
  420. tasklet_kill(&card->mpuout->tasklet);
  421. kfree(card->mpuout);
  422. tasklet_kill(&card->mpuin->tasklet);
  423. kfree(card->mpuin);
  424. }
  425. static void __devinit voice_init(struct emu10k1_card *card)
  426. {
  427. int i;
  428. for (i = 0; i < NUM_G; i++)
  429. card->voicetable[i] = VOICE_USAGE_FREE;
  430. }
  431. static void __devinit timer_init(struct emu10k1_card *card)
  432. {
  433. INIT_LIST_HEAD(&card->timers);
  434. card->timer_delay = TIMER_STOPPED;
  435. spin_lock_init(&card->timer_lock);
  436. }
  437. static void __devinit addxmgr_init(struct emu10k1_card *card)
  438. {
  439. u32 count;
  440. for (count = 0; count < MAXPAGES; count++)
  441. card->emupagetable[count] = 0;
  442. /* Mark first page as used */
  443. /* This page is reserved by the driver */
  444. card->emupagetable[0] = 0x8001;
  445. card->emupagetable[1] = MAXPAGES - 1;
  446. }
  447. static void fx_cleanup(struct patch_manager *mgr)
  448. {
  449. int i;
  450. for(i = 0; i < mgr->current_pages; i++)
  451. free_page((unsigned long) mgr->patch[i]);
  452. }
  453. static int __devinit fx_init(struct emu10k1_card *card)
  454. {
  455. struct patch_manager *mgr = &card->mgr;
  456. struct dsp_patch *patch;
  457. struct dsp_rpatch *rpatch;
  458. s32 left, right;
  459. int i;
  460. u32 pc = 0;
  461. u32 patch_n=0;
  462. struct emu_efx_info_t emu_efx_info[2]=
  463. {{ 20, 10, 0x400, 0x100, 0x20 },
  464. { 24, 12, 0x600, 0x400, 0x60 },
  465. };
  466. for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
  467. mgr->ctrl_gpr[i][0] = -1;
  468. mgr->ctrl_gpr[i][1] = -1;
  469. }
  470. if (card->is_audigy)
  471. mgr->current_pages = (2 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
  472. else
  473. /* !! The number below must equal the number of patches, currently 11 !! */
  474. mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
  475. for (i = 0; i < mgr->current_pages; i++) {
  476. mgr->patch[i] = (void *)__get_free_page(GFP_KERNEL);
  477. if (mgr->patch[i] == NULL) {
  478. mgr->current_pages = i;
  479. fx_cleanup(mgr);
  480. return -ENOMEM;
  481. }
  482. memset(mgr->patch[i], 0, PAGE_SIZE);
  483. }
  484. if (card->is_audigy) {
  485. for (i = 0; i < 1024; i++)
  486. OP(0xf, 0x0c0, 0x0c0, 0x0cf, 0x0c0);
  487. for (i = 0; i < 512 ; i++)
  488. sblive_writeptr(card, A_GPR_BASE+i,0,0);
  489. pc=0;
  490. //Pcm input volume
  491. OP(0, 0x402, 0x0c0, 0x406, 0x000);
  492. OP(0, 0x403, 0x0c0, 0x407, 0x001);
  493. //CD-Digital input Volume
  494. OP(0, 0x404, 0x0c0, 0x40d, 0x42);
  495. OP(0, 0x405, 0x0c0, 0x40f, 0x43);
  496. // CD + PCM
  497. OP(6, 0x400, 0x0c0, 0x402, 0x404);
  498. OP(6, 0x401, 0x0c0, 0x403, 0x405);
  499. // Front Output + Master Volume
  500. OP(0, 0x68, 0x0c0, 0x408, 0x400);
  501. OP(0, 0x69, 0x0c0, 0x409, 0x401);
  502. // Add-in analog inputs for other speakers
  503. OP(6, 0x400, 0x40, 0x400, 0xc0);
  504. OP(6, 0x401, 0x41, 0x401, 0xc0);
  505. // Digital Front + Master Volume
  506. OP(0, 0x60, 0x0c0, 0x408, 0x400);
  507. OP(0, 0x61, 0x0c0, 0x409, 0x401);
  508. // Rear Output + Rear Volume
  509. OP(0, 0x06e, 0x0c0, 0x419, 0x400);
  510. OP(0, 0x06f, 0x0c0, 0x41a, 0x401);
  511. // Digital Rear Output + Rear Volume
  512. OP(0, 0x066, 0x0c0, 0x419, 0x400);
  513. OP(0, 0x067, 0x0c0, 0x41a, 0x401);
  514. // Audigy Drive, Headphone out
  515. OP(6, 0x64, 0x0c0, 0x0c0, 0x400);
  516. OP(6, 0x65, 0x0c0, 0x0c0, 0x401);
  517. // ac97 Recording
  518. OP(6, 0x76, 0x0c0, 0x0c0, 0x40);
  519. OP(6, 0x77, 0x0c0, 0x0c0, 0x41);
  520. // Center = sub = Left/2 + Right/2
  521. OP(0xe, 0x400, 0x401, 0xcd, 0x400);
  522. // center/sub Volume (master)
  523. OP(0, 0x06a, 0x0c0, 0x408, 0x400);
  524. OP(0, 0x06b, 0x0c0, 0x409, 0x400);
  525. // Digital center/sub Volume (master)
  526. OP(0, 0x062, 0x0c0, 0x408, 0x400);
  527. OP(0, 0x063, 0x0c0, 0x409, 0x400);
  528. ROUTING_PATCH_START(rpatch, "Routing");
  529. ROUTING_PATCH_END(rpatch);
  530. /* delimiter patch */
  531. patch = PATCH(mgr, patch_n);
  532. patch->code_size = 0;
  533. sblive_writeptr(card, 0x53, 0, 0);
  534. } else {
  535. for (i = 0; i < 512 ; i++)
  536. OP(6, 0x40, 0x40, 0x40, 0x40);
  537. for (i = 0; i < 256; i++)
  538. sblive_writeptr_tag(card, 0,
  539. FXGPREGBASE + i, 0,
  540. TANKMEMADDRREGBASE + i, 0,
  541. TAGLIST_END);
  542. pc = 0;
  543. //first free GPR = 0x11b
  544. /* FX volume correction and Volume control*/
  545. INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
  546. GET_OUTPUT_GPR(patch, 0x100, 0x0);
  547. GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
  548. GET_DYNAMIC_GPR(patch, 0x112);
  549. OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
  550. OP(0, 0x100, 0x040, 0x112, 0x106); //*vol
  551. INPUT_PATCH_END(patch);
  552. INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
  553. GET_OUTPUT_GPR(patch, 0x101, 0x1);
  554. GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
  555. GET_DYNAMIC_GPR(patch, 0x112);
  556. OP(4, 0x112, 0x40, PCM_IN_R, 0x44);
  557. OP(0, 0x101, 0x040, 0x112, 0x107);
  558. INPUT_PATCH_END(patch);
  559. // CD-Digital In Volume control
  560. INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
  561. GET_OUTPUT_GPR(patch, 0x10c, 0x12);
  562. GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
  563. OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
  564. INPUT_PATCH_END(patch);
  565. INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
  566. GET_OUTPUT_GPR(patch, 0x10e, 0x13);
  567. GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
  568. OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
  569. INPUT_PATCH_END(patch);
  570. //Volume Correction for Multi-channel Inputs
  571. INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
  572. patch->input=patch->output=0x3F00;
  573. GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
  574. GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
  575. GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
  576. GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
  577. GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
  578. GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
  579. OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
  580. OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
  581. OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
  582. OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
  583. OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
  584. OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
  585. INPUT_PATCH_END(patch);
  586. //Routing patch start
  587. ROUTING_PATCH_START(rpatch, "Routing");
  588. GET_INPUT_GPR(rpatch, 0x100, 0x0);
  589. GET_INPUT_GPR(rpatch, 0x101, 0x1);
  590. GET_INPUT_GPR(rpatch, 0x10c, 0x12);
  591. GET_INPUT_GPR(rpatch, 0x10e, 0x13);
  592. GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
  593. GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
  594. GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
  595. GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
  596. GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
  597. GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
  598. GET_DYNAMIC_GPR(rpatch, 0x102);
  599. GET_DYNAMIC_GPR(rpatch, 0x103);
  600. GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
  601. GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
  602. GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
  603. GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
  604. /* input buffer */
  605. OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
  606. OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
  607. /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
  608. OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
  609. CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
  610. CONNECT(PCM_IN_L, AC97_FRONT_L);
  611. CONNECT(SPDIF_CD_L, AC97_FRONT_L);
  612. OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
  613. CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
  614. CONNECT(PCM_IN_R, AC97_FRONT_R);
  615. CONNECT(SPDIF_CD_R, AC97_FRONT_R);
  616. /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */
  617. OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
  618. OP(6, 0x104, 0x104, 0x10c, 0x102);
  619. CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
  620. CONNECT(AC97_IN_L, ANALOG_REAR_L);
  621. CONNECT(PCM_IN_L, ANALOG_REAR_L);
  622. CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
  623. CONNECT(PCM1_IN_L, ANALOG_REAR_L);
  624. OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
  625. OP(6, 0x105, 0x105, 0x10e, 0x103);
  626. CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
  627. CONNECT(AC97_IN_R, ANALOG_REAR_R);
  628. CONNECT(PCM_IN_R, ANALOG_REAR_R);
  629. CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
  630. CONNECT(PCM1_IN_R, ANALOG_REAR_R);
  631. /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
  632. OP(6, 0x10b, 0x100, 0x102, 0x10c);
  633. OP(6, 0x10b, 0x10b, 0x113, 0x40);
  634. CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
  635. CONNECT(PCM_IN_L, DIGITAL_OUT_L);
  636. CONNECT(AC97_IN_L, DIGITAL_OUT_L);
  637. CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
  638. OP(6, 0x10a, 0x101, 0x103, 0x10e);
  639. OP(6, 0x10b, 0x10b, 0x114, 0x40);
  640. CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
  641. CONNECT(PCM_IN_R, DIGITAL_OUT_R);
  642. CONNECT(AC97_IN_R, DIGITAL_OUT_R);
  643. CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
  644. /* AC97 In --> ADC Recording Buffer */
  645. OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
  646. CONNECT(AC97_IN_L, ADC_REC_L);
  647. OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
  648. CONNECT(AC97_IN_R, ADC_REC_R);
  649. /* fx12:Analog-Center */
  650. OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
  651. CONNECT(MULTI_CENTER, ANALOG_CENTER);
  652. /* fx11:Analog-LFE */
  653. OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
  654. CONNECT(MULTI_LFE, ANALOG_LFE);
  655. /* fx12:Digital-Center */
  656. OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
  657. CONNECT(MULTI_CENTER, DIGITAL_CENTER);
  658. /* fx11:Analog-LFE */
  659. OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
  660. CONNECT(MULTI_LFE, DIGITAL_LFE);
  661. ROUTING_PATCH_END(rpatch);
  662. // Rear volume control
  663. OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
  664. GET_INPUT_GPR(patch, 0x104, 0x8);
  665. GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
  666. OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
  667. OUTPUT_PATCH_END(patch);
  668. OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
  669. GET_INPUT_GPR(patch, 0x105, 0x9);
  670. GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
  671. OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
  672. OUTPUT_PATCH_END(patch);
  673. //Master volume control on front-digital
  674. OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
  675. GET_INPUT_GPR(patch, 0x10a, 0x2);
  676. GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
  677. OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
  678. OUTPUT_PATCH_END(patch);
  679. OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
  680. GET_INPUT_GPR(patch, 0x10b, 0x3);
  681. GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
  682. OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
  683. OUTPUT_PATCH_END(patch);
  684. /* delimiter patch */
  685. patch = PATCH(mgr, patch_n);
  686. patch->code_size = 0;
  687. sblive_writeptr(card, DBG, 0, 0);
  688. }
  689. spin_lock_init(&mgr->lock);
  690. // Set up Volume controls, try to keep this the same for both Audigy and Live
  691. //Master volume
  692. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][0] = 8;
  693. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][1] = 9;
  694. left = card->ac97->mixer_state[SOUND_MIXER_VOLUME] & 0xff;
  695. right = (card->ac97->mixer_state[SOUND_MIXER_VOLUME] >> 8) & 0xff;
  696. emu10k1_set_volume_gpr(card, 8, left, 1 << card->ac97->bit_resolution);
  697. emu10k1_set_volume_gpr(card, 9, right, 1 << card->ac97->bit_resolution);
  698. //Rear volume
  699. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][0] = 0x19;
  700. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][1] = 0x1a;
  701. left = right = 67;
  702. card->ac97->mixer_state[SOUND_MIXER_OGAIN] = (right << 8) | left;
  703. card->ac97->supported_mixers |= SOUND_MASK_OGAIN;
  704. card->ac97->stereo_mixers |= SOUND_MASK_OGAIN;
  705. emu10k1_set_volume_gpr(card, 0x19, left, VOL_5BIT);
  706. emu10k1_set_volume_gpr(card, 0x1a, right, VOL_5BIT);
  707. //PCM Volume
  708. mgr->ctrl_gpr[SOUND_MIXER_PCM][0] = 6;
  709. mgr->ctrl_gpr[SOUND_MIXER_PCM][1] = 7;
  710. left = card->ac97->mixer_state[SOUND_MIXER_PCM] & 0xff;
  711. right = (card->ac97->mixer_state[SOUND_MIXER_PCM] >> 8) & 0xff;
  712. emu10k1_set_volume_gpr(card, 6, left, VOL_5BIT);
  713. emu10k1_set_volume_gpr(card, 7, right, VOL_5BIT);
  714. //CD-Digital Volume
  715. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][0] = 0xd;
  716. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][1] = 0xf;
  717. left = right = 67;
  718. card->ac97->mixer_state[SOUND_MIXER_DIGITAL1] = (right << 8) | left;
  719. card->ac97->supported_mixers |= SOUND_MASK_DIGITAL1;
  720. card->ac97->stereo_mixers |= SOUND_MASK_DIGITAL1;
  721. emu10k1_set_volume_gpr(card, 0xd, left, VOL_5BIT);
  722. emu10k1_set_volume_gpr(card, 0xf, right, VOL_5BIT);
  723. //hard wire the ac97's pcm, pcm volume is done above using dsp code.
  724. if (card->is_audigy)
  725. //for Audigy, we mute it and use the philips 6 channel DAC instead
  726. emu10k1_ac97_write(card->ac97, 0x18, 0x8000);
  727. else
  728. //For the Live we hardwire it to full volume
  729. emu10k1_ac97_write(card->ac97, 0x18, 0x0);
  730. //remove it from the ac97_codec's control
  731. card->ac97_supported_mixers &= ~SOUND_MASK_PCM;
  732. card->ac97_stereo_mixers &= ~SOUND_MASK_PCM;
  733. //set Igain to 0dB by default, maybe consider hardwiring it here.
  734. emu10k1_ac97_write(card->ac97, AC97_RECORD_GAIN, 0x0000);
  735. card->ac97->mixer_state[SOUND_MIXER_IGAIN] = 0x101;
  736. return 0;
  737. }
  738. static int __devinit hw_init(struct emu10k1_card *card)
  739. {
  740. int nCh;
  741. u32 pagecount; /* tmp */
  742. int ret;
  743. /* Disable audio and lock cache */
  744. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  745. /* Reset recording buffers */
  746. sblive_writeptr_tag(card, 0,
  747. MICBS, ADCBS_BUFSIZE_NONE,
  748. MICBA, 0,
  749. FXBS, ADCBS_BUFSIZE_NONE,
  750. FXBA, 0,
  751. ADCBS, ADCBS_BUFSIZE_NONE,
  752. ADCBA, 0,
  753. TAGLIST_END);
  754. /* Disable channel interrupt */
  755. emu10k1_writefn0(card, INTE, 0);
  756. sblive_writeptr_tag(card, 0,
  757. CLIEL, 0,
  758. CLIEH, 0,
  759. SOLEL, 0,
  760. SOLEH, 0,
  761. TAGLIST_END);
  762. if (card->is_audigy) {
  763. sblive_writeptr_tag(card,0,
  764. 0x5e,0xf00,
  765. 0x5f,0x3,
  766. TAGLIST_END);
  767. }
  768. /* Init envelope engine */
  769. for (nCh = 0; nCh < NUM_G; nCh++) {
  770. sblive_writeptr_tag(card, nCh,
  771. DCYSUSV, 0,
  772. IP, 0,
  773. VTFT, 0xffff,
  774. CVCF, 0xffff,
  775. PTRX, 0,
  776. //CPF, 0,
  777. CCR, 0,
  778. PSST, 0,
  779. DSL, 0x10,
  780. CCCA, 0,
  781. Z1, 0,
  782. Z2, 0,
  783. FXRT, 0xd01c0000,
  784. ATKHLDM, 0,
  785. DCYSUSM, 0,
  786. IFATN, 0xffff,
  787. PEFE, 0,
  788. FMMOD, 0,
  789. TREMFRQ, 24, /* 1 Hz */
  790. FM2FRQ2, 24, /* 1 Hz */
  791. TEMPENV, 0,
  792. /*** These are last so OFF prevents writing ***/
  793. LFOVAL2, 0,
  794. LFOVAL1, 0,
  795. ATKHLDV, 0,
  796. ENVVOL, 0,
  797. ENVVAL, 0,
  798. TAGLIST_END);
  799. sblive_writeptr(card, CPF, nCh, 0);
  800. /*
  801. Audigy FXRT initialization
  802. reversed eng'd, may not be accurate.
  803. */
  804. if (card->is_audigy) {
  805. sblive_writeptr_tag(card,nCh,
  806. 0x4c,0x0,
  807. 0x4d,0x0,
  808. 0x4e,0x0,
  809. 0x4f,0x0,
  810. A_FXRT1, 0x3f3f3f3f,
  811. A_FXRT2, 0x3f3f3f3f,
  812. A_SENDAMOUNTS, 0,
  813. TAGLIST_END);
  814. }
  815. }
  816. /*
  817. ** Init to 0x02109204 :
  818. ** Clock accuracy = 0 (1000ppm)
  819. ** Sample Rate = 2 (48kHz)
  820. ** Audio Channel = 1 (Left of 2)
  821. ** Source Number = 0 (Unspecified)
  822. ** Generation Status = 1 (Original for Cat Code 12)
  823. ** Cat Code = 12 (Digital Signal Mixer)
  824. ** Mode = 0 (Mode 0)
  825. ** Emphasis = 0 (None)
  826. ** CP = 1 (Copyright unasserted)
  827. ** AN = 0 (Digital audio)
  828. ** P = 0 (Consumer)
  829. */
  830. sblive_writeptr_tag(card, 0,
  831. /* SPDIF0 */
  832. SPCS0, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  833. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  834. /* SPDIF1 */
  835. SPCS1, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  836. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  837. /* SPDIF2 & SPDIF3 */
  838. SPCS2, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  839. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  840. TAGLIST_END);
  841. if (card->is_audigy && (card->chiprev == 4)) {
  842. /* Hacks for Alice3 to work independent of haP16V driver */
  843. u32 tmp;
  844. //Setup SRCMulti_I2S SamplingRate
  845. tmp = sblive_readptr(card, A_SPDIF_SAMPLERATE, 0);
  846. tmp &= 0xfffff1ff;
  847. tmp |= (0x2<<9);
  848. sblive_writeptr(card, A_SPDIF_SAMPLERATE, 0, tmp);
  849. /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
  850. emu10k1_writefn0(card, 0x20, 0x600000);
  851. emu10k1_writefn0(card, 0x24, 0x14);
  852. /* Setup SRCMulti Input Audio Enable */
  853. emu10k1_writefn0(card, 0x20, 0x6E0000);
  854. emu10k1_writefn0(card, 0x24, 0xFF00FF00);
  855. }
  856. ret = fx_init(card); /* initialize effects engine */
  857. if (ret < 0)
  858. return ret;
  859. card->tankmem.size = 0;
  860. card->virtualpagetable.size = MAXPAGES * sizeof(u32);
  861. card->virtualpagetable.addr = pci_alloc_consistent(card->pci_dev, card->virtualpagetable.size, &card->virtualpagetable.dma_handle);
  862. if (card->virtualpagetable.addr == NULL) {
  863. ERROR();
  864. ret = -ENOMEM;
  865. goto err0;
  866. }
  867. card->silentpage.size = EMUPAGESIZE;
  868. card->silentpage.addr = pci_alloc_consistent(card->pci_dev, card->silentpage.size, &card->silentpage.dma_handle);
  869. if (card->silentpage.addr == NULL) {
  870. ERROR();
  871. ret = -ENOMEM;
  872. goto err1;
  873. }
  874. for (pagecount = 0; pagecount < MAXPAGES; pagecount++)
  875. ((u32 *) card->virtualpagetable.addr)[pagecount] = cpu_to_le32(((u32) card->silentpage.dma_handle * 2) | pagecount);
  876. /* Init page table & tank memory base register */
  877. sblive_writeptr_tag(card, 0,
  878. PTB, (u32) card->virtualpagetable.dma_handle,
  879. TCB, 0,
  880. TCBS, 0,
  881. TAGLIST_END);
  882. for (nCh = 0; nCh < NUM_G; nCh++) {
  883. sblive_writeptr_tag(card, nCh,
  884. MAPA, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  885. MAPB, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  886. TAGLIST_END);
  887. }
  888. /* Hokay, now enable the AUD bit */
  889. /* Enable Audio = 1 */
  890. /* Mute Disable Audio = 0 */
  891. /* Lock Tank Memory = 1 */
  892. /* Lock Sound Memory = 0 */
  893. /* Auto Mute = 1 */
  894. if (card->is_audigy) {
  895. if (card->chiprev == 4)
  896. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AC3ENABLE_CDSPDIF | HCFG_AC3ENABLE_GPSPDIF | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  897. else
  898. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  899. } else {
  900. if (card->model == 0x20 || card->model == 0xc400 ||
  901. (card->model == 0x21 && card->chiprev < 6))
  902. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
  903. else
  904. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  905. }
  906. /* Enable Vol_Ctrl irqs */
  907. emu10k1_irq_enable(card, INTE_VOLINCRENABLE | INTE_VOLDECRENABLE | INTE_MUTEENABLE | INTE_FXDSPENABLE);
  908. if (card->is_audigy && (card->chiprev == 4)) {
  909. /* Unmute Analog now. Set GPO6 to 1 for Apollo.
  910. * This has to be done after init ALice3 I2SOut beyond 48KHz.
  911. * So, sequence is important. */
  912. u32 tmp = emu10k1_readfn0(card, A_IOCFG);
  913. tmp |= 0x0040;
  914. emu10k1_writefn0(card, A_IOCFG, tmp);
  915. }
  916. /* FIXME: TOSLink detection */
  917. card->has_toslink = 0;
  918. /* Initialize digital passthrough variables */
  919. card->pt.pos_gpr = card->pt.intr_gpr = card->pt.enable_gpr = -1;
  920. card->pt.selected = 0;
  921. card->pt.state = PT_STATE_INACTIVE;
  922. card->pt.spcs_to_use = 0x01;
  923. card->pt.patch_name = "AC3pass";
  924. card->pt.intr_gpr_name = "count";
  925. card->pt.enable_gpr_name = "enable";
  926. card->pt.pos_gpr_name = "ptr";
  927. spin_lock_init(&card->pt.lock);
  928. init_waitqueue_head(&card->pt.wait);
  929. /* tmp = sblive_readfn0(card, HCFG);
  930. if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
  931. sblive_writefn0(card, HCFG, tmp | 0x800);
  932. udelay(512);
  933. if (tmp != (sblive_readfn0(card, HCFG) & ~0x800)) {
  934. card->has_toslink = 1;
  935. sblive_writefn0(card, HCFG, tmp);
  936. }
  937. }
  938. */
  939. return 0;
  940. err1:
  941. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  942. err0:
  943. fx_cleanup(&card->mgr);
  944. return ret;
  945. }
  946. static int __devinit emu10k1_init(struct emu10k1_card *card)
  947. {
  948. /* Init Card */
  949. if (hw_init(card) < 0)
  950. return -1;
  951. voice_init(card);
  952. timer_init(card);
  953. addxmgr_init(card);
  954. DPD(2, " hw control register -> %#x\n", emu10k1_readfn0(card, HCFG));
  955. return 0;
  956. }
  957. static void emu10k1_cleanup(struct emu10k1_card *card)
  958. {
  959. int ch;
  960. emu10k1_writefn0(card, INTE, 0);
  961. /** Shutdown the chip **/
  962. for (ch = 0; ch < NUM_G; ch++)
  963. sblive_writeptr(card, DCYSUSV, ch, 0);
  964. for (ch = 0; ch < NUM_G; ch++) {
  965. sblive_writeptr_tag(card, ch,
  966. VTFT, 0,
  967. CVCF, 0,
  968. PTRX, 0,
  969. //CPF, 0,
  970. TAGLIST_END);
  971. sblive_writeptr(card, CPF, ch, 0);
  972. }
  973. /* Disable audio and lock cache */
  974. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  975. sblive_writeptr_tag(card, 0,
  976. PTB, 0,
  977. /* Reset recording buffers */
  978. MICBS, ADCBS_BUFSIZE_NONE,
  979. MICBA, 0,
  980. FXBS, ADCBS_BUFSIZE_NONE,
  981. FXBA, 0,
  982. FXWC, 0,
  983. ADCBS, ADCBS_BUFSIZE_NONE,
  984. ADCBA, 0,
  985. TCBS, 0,
  986. TCB, 0,
  987. DBG, 0x8000,
  988. /* Disable channel interrupt */
  989. CLIEL, 0,
  990. CLIEH, 0,
  991. SOLEL, 0,
  992. SOLEH, 0,
  993. TAGLIST_END);
  994. if (card->is_audigy)
  995. sblive_writeptr(card, 0, A_DBG, A_DBG_SINGLE_STEP);
  996. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  997. pci_free_consistent(card->pci_dev, card->silentpage.size, card->silentpage.addr, card->silentpage.dma_handle);
  998. if(card->tankmem.size != 0)
  999. pci_free_consistent(card->pci_dev, card->tankmem.size, card->tankmem.addr, card->tankmem.dma_handle);
  1000. /* release patch storage memory */
  1001. fx_cleanup(&card->mgr);
  1002. }
  1003. /* Driver initialization routine */
  1004. static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
  1005. {
  1006. struct emu10k1_card *card;
  1007. u32 subsysvid;
  1008. int ret;
  1009. if (pci_set_dma_mask(pci_dev, EMU10K1_DMA_MASK)) {
  1010. printk(KERN_ERR "emu10k1: architecture does not support 29bit PCI busmaster DMA\n");
  1011. return -ENODEV;
  1012. }
  1013. if (pci_enable_device(pci_dev))
  1014. return -EIO;
  1015. pci_set_master(pci_dev);
  1016. if ((card = kzalloc(sizeof(struct emu10k1_card), GFP_KERNEL)) == NULL) {
  1017. printk(KERN_ERR "emu10k1: out of memory\n");
  1018. return -ENOMEM;
  1019. }
  1020. card->iobase = pci_resource_start(pci_dev, 0);
  1021. card->length = pci_resource_len(pci_dev, 0);
  1022. if (request_region(card->iobase, card->length, card_names[pci_id->driver_data]) == NULL) {
  1023. printk(KERN_ERR "emu10k1: IO space in use\n");
  1024. ret = -EBUSY;
  1025. goto err_region;
  1026. }
  1027. pci_set_drvdata(pci_dev, card);
  1028. card->irq = pci_dev->irq;
  1029. card->pci_dev = pci_dev;
  1030. /* Reserve IRQ Line */
  1031. if (request_irq(card->irq, emu10k1_interrupt, IRQF_SHARED, card_names[pci_id->driver_data], card)) {
  1032. printk(KERN_ERR "emu10k1: IRQ in use\n");
  1033. ret = -EBUSY;
  1034. goto err_irq;
  1035. }
  1036. pci_read_config_byte(pci_dev, PCI_REVISION_ID, &card->chiprev);
  1037. pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &card->model);
  1038. printk(KERN_INFO "emu10k1: %s rev %d model %#04x found, IO at %#04lx-%#04lx, IRQ %d\n",
  1039. card_names[pci_id->driver_data], card->chiprev, card->model, card->iobase,
  1040. card->iobase + card->length - 1, card->irq);
  1041. if (pci_id->device == PCI_DEVICE_ID_CREATIVE_AUDIGY)
  1042. card->is_audigy = 1;
  1043. pci_read_config_dword(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &subsysvid);
  1044. card->is_aps = (subsysvid == EMU_APS_SUBID);
  1045. spin_lock_init(&card->lock);
  1046. mutex_init(&card->open_sem);
  1047. card->open_mode = 0;
  1048. init_waitqueue_head(&card->open_wait);
  1049. ret = emu10k1_audio_init(card);
  1050. if (ret < 0) {
  1051. printk(KERN_ERR "emu10k1: cannot initialize audio devices\n");
  1052. goto err_audio;
  1053. }
  1054. ret = emu10k1_mixer_init(card);
  1055. if (ret < 0) {
  1056. printk(KERN_ERR "emu10k1: cannot initialize AC97 codec\n");
  1057. goto err_mixer;
  1058. }
  1059. ret = emu10k1_midi_init(card);
  1060. if (ret < 0) {
  1061. printk(KERN_ERR "emu10k1: cannot register midi device\n");
  1062. goto err_midi;
  1063. }
  1064. ret = emu10k1_init(card);
  1065. if (ret < 0) {
  1066. printk(KERN_ERR "emu10k1: cannot initialize device\n");
  1067. goto err_emu10k1_init;
  1068. }
  1069. if (card->is_aps)
  1070. emu10k1_ecard_init(card);
  1071. ret = emu10k1_register_devices(card);
  1072. if (ret < 0)
  1073. goto err_register;
  1074. /* proc entries must be created after registering devices, as
  1075. * emu10k1_info_proc prints card->audio_dev &co. */
  1076. ret = emu10k1_proc_init(card);
  1077. if (ret < 0) {
  1078. printk(KERN_ERR "emu10k1: cannot initialize proc directory\n");
  1079. goto err_proc;
  1080. }
  1081. list_add(&card->list, &emu10k1_devs);
  1082. return 0;
  1083. err_proc:
  1084. emu10k1_unregister_devices(card);
  1085. err_register:
  1086. emu10k1_cleanup(card);
  1087. err_emu10k1_init:
  1088. emu10k1_midi_cleanup(card);
  1089. err_midi:
  1090. emu10k1_mixer_cleanup(card);
  1091. err_mixer:
  1092. emu10k1_audio_cleanup(card);
  1093. err_audio:
  1094. free_irq(card->irq, card);
  1095. err_irq:
  1096. release_region(card->iobase, card->length);
  1097. pci_set_drvdata(pci_dev, NULL);
  1098. err_region:
  1099. kfree(card);
  1100. return ret;
  1101. }
  1102. static void __devexit emu10k1_remove(struct pci_dev *pci_dev)
  1103. {
  1104. struct emu10k1_card *card = pci_get_drvdata(pci_dev);
  1105. list_del(&card->list);
  1106. emu10k1_unregister_devices(card);
  1107. emu10k1_cleanup(card);
  1108. emu10k1_midi_cleanup(card);
  1109. emu10k1_mixer_cleanup(card);
  1110. emu10k1_proc_cleanup(card);
  1111. emu10k1_audio_cleanup(card);
  1112. free_irq(card->irq, card);
  1113. release_region(card->iobase, card->length);
  1114. kfree(card);
  1115. pci_set_drvdata(pci_dev, NULL);
  1116. }
  1117. MODULE_AUTHOR("Bertrand Lee, Cai Ying. (Email to: emu10k1-devel@lists.sourceforge.net)");
  1118. MODULE_DESCRIPTION("Creative EMU10K1 PCI Audio Driver v" DRIVER_VERSION "\nCopyright (C) 1999 Creative Technology Ltd.");
  1119. MODULE_LICENSE("GPL");
  1120. static struct pci_driver emu10k1_pci_driver = {
  1121. .name = "emu10k1",
  1122. .id_table = emu10k1_pci_tbl,
  1123. .probe = emu10k1_probe,
  1124. .remove = __devexit_p(emu10k1_remove),
  1125. };
  1126. static int __init emu10k1_init_module(void)
  1127. {
  1128. printk(KERN_INFO "Creative EMU10K1 PCI Audio Driver, version " DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
  1129. return pci_register_driver(&emu10k1_pci_driver);
  1130. }
  1131. static void __exit emu10k1_cleanup_module(void)
  1132. {
  1133. pci_unregister_driver(&emu10k1_pci_driver);
  1134. return;
  1135. }
  1136. module_init(emu10k1_init_module);
  1137. module_exit(emu10k1_cleanup_module);
  1138. #ifdef EMU10K1_SEQUENCER
  1139. /* in midi.c */
  1140. extern int emu10k1_seq_midi_open(int dev, int mode,
  1141. void (*input)(int dev, unsigned char midi_byte),
  1142. void (*output)(int dev));
  1143. extern void emu10k1_seq_midi_close(int dev);
  1144. extern int emu10k1_seq_midi_out(int dev, unsigned char midi_byte);
  1145. extern int emu10k1_seq_midi_start_read(int dev);
  1146. extern int emu10k1_seq_midi_end_read(int dev);
  1147. extern void emu10k1_seq_midi_kick(int dev);
  1148. extern int emu10k1_seq_midi_buffer_status(int dev);
  1149. static struct midi_operations emu10k1_midi_operations =
  1150. {
  1151. THIS_MODULE,
  1152. {"EMU10K1 MIDI", 0, 0, SNDCARD_EMU10K1},
  1153. &std_midi_synth,
  1154. {0},
  1155. emu10k1_seq_midi_open,
  1156. emu10k1_seq_midi_close,
  1157. NULL,
  1158. emu10k1_seq_midi_out,
  1159. emu10k1_seq_midi_start_read,
  1160. emu10k1_seq_midi_end_read,
  1161. emu10k1_seq_midi_kick,
  1162. NULL,
  1163. emu10k1_seq_midi_buffer_status,
  1164. NULL
  1165. };
  1166. #endif