main.c 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476
  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 *, struct pt_regs *s);
  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 = kmalloc(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. memset(card->mpuout, 0, sizeof(struct emu10k1_mpuout));
  391. card->mpuout->intr = 1;
  392. card->mpuout->status = FLAGS_AVAILABLE;
  393. card->mpuout->state = CARDMIDIOUT_STATE_DEFAULT;
  394. tasklet_init(&card->mpuout->tasklet, emu10k1_mpuout_bh, (unsigned long) card);
  395. spin_lock_init(&card->mpuout->lock);
  396. card->mpuin = kmalloc(sizeof(struct emu10k1_mpuin), GFP_KERNEL);
  397. if (card->mpuin == NULL) {
  398. printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuin: out of memory\n");
  399. ret = -ENOMEM;
  400. goto err_out2;
  401. }
  402. memset(card->mpuin, 0, sizeof(struct emu10k1_mpuin));
  403. card->mpuin->status = FLAGS_AVAILABLE;
  404. tasklet_init(&card->mpuin->tasklet, emu10k1_mpuin_bh, (unsigned long) card->mpuin);
  405. spin_lock_init(&card->mpuin->lock);
  406. /* Reset the MPU port */
  407. if (emu10k1_mpu_reset(card) < 0) {
  408. ERROR();
  409. ret = -EIO;
  410. goto err_out3;
  411. }
  412. return 0;
  413. err_out3:
  414. kfree(card->mpuin);
  415. err_out2:
  416. kfree(card->mpuout);
  417. err_out1:
  418. return ret;
  419. }
  420. static void emu10k1_midi_cleanup(struct emu10k1_card *card)
  421. {
  422. tasklet_kill(&card->mpuout->tasklet);
  423. kfree(card->mpuout);
  424. tasklet_kill(&card->mpuin->tasklet);
  425. kfree(card->mpuin);
  426. }
  427. static void __devinit voice_init(struct emu10k1_card *card)
  428. {
  429. int i;
  430. for (i = 0; i < NUM_G; i++)
  431. card->voicetable[i] = VOICE_USAGE_FREE;
  432. }
  433. static void __devinit timer_init(struct emu10k1_card *card)
  434. {
  435. INIT_LIST_HEAD(&card->timers);
  436. card->timer_delay = TIMER_STOPPED;
  437. spin_lock_init(&card->timer_lock);
  438. }
  439. static void __devinit addxmgr_init(struct emu10k1_card *card)
  440. {
  441. u32 count;
  442. for (count = 0; count < MAXPAGES; count++)
  443. card->emupagetable[count] = 0;
  444. /* Mark first page as used */
  445. /* This page is reserved by the driver */
  446. card->emupagetable[0] = 0x8001;
  447. card->emupagetable[1] = MAXPAGES - 1;
  448. }
  449. static void fx_cleanup(struct patch_manager *mgr)
  450. {
  451. int i;
  452. for(i = 0; i < mgr->current_pages; i++)
  453. free_page((unsigned long) mgr->patch[i]);
  454. }
  455. static int __devinit fx_init(struct emu10k1_card *card)
  456. {
  457. struct patch_manager *mgr = &card->mgr;
  458. struct dsp_patch *patch;
  459. struct dsp_rpatch *rpatch;
  460. s32 left, right;
  461. int i;
  462. u32 pc = 0;
  463. u32 patch_n=0;
  464. struct emu_efx_info_t emu_efx_info[2]=
  465. {{ 20, 10, 0x400, 0x100, 0x20 },
  466. { 24, 12, 0x600, 0x400, 0x60 },
  467. };
  468. for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
  469. mgr->ctrl_gpr[i][0] = -1;
  470. mgr->ctrl_gpr[i][1] = -1;
  471. }
  472. if (card->is_audigy)
  473. mgr->current_pages = (2 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
  474. else
  475. /* !! The number below must equal the number of patches, currently 11 !! */
  476. mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
  477. for (i = 0; i < mgr->current_pages; i++) {
  478. mgr->patch[i] = (void *)__get_free_page(GFP_KERNEL);
  479. if (mgr->patch[i] == NULL) {
  480. mgr->current_pages = i;
  481. fx_cleanup(mgr);
  482. return -ENOMEM;
  483. }
  484. memset(mgr->patch[i], 0, PAGE_SIZE);
  485. }
  486. if (card->is_audigy) {
  487. for (i = 0; i < 1024; i++)
  488. OP(0xf, 0x0c0, 0x0c0, 0x0cf, 0x0c0);
  489. for (i = 0; i < 512 ; i++)
  490. sblive_writeptr(card, A_GPR_BASE+i,0,0);
  491. pc=0;
  492. //Pcm input volume
  493. OP(0, 0x402, 0x0c0, 0x406, 0x000);
  494. OP(0, 0x403, 0x0c0, 0x407, 0x001);
  495. //CD-Digital input Volume
  496. OP(0, 0x404, 0x0c0, 0x40d, 0x42);
  497. OP(0, 0x405, 0x0c0, 0x40f, 0x43);
  498. // CD + PCM
  499. OP(6, 0x400, 0x0c0, 0x402, 0x404);
  500. OP(6, 0x401, 0x0c0, 0x403, 0x405);
  501. // Front Output + Master Volume
  502. OP(0, 0x68, 0x0c0, 0x408, 0x400);
  503. OP(0, 0x69, 0x0c0, 0x409, 0x401);
  504. // Add-in analog inputs for other speakers
  505. OP(6, 0x400, 0x40, 0x400, 0xc0);
  506. OP(6, 0x401, 0x41, 0x401, 0xc0);
  507. // Digital Front + Master Volume
  508. OP(0, 0x60, 0x0c0, 0x408, 0x400);
  509. OP(0, 0x61, 0x0c0, 0x409, 0x401);
  510. // Rear Output + Rear Volume
  511. OP(0, 0x06e, 0x0c0, 0x419, 0x400);
  512. OP(0, 0x06f, 0x0c0, 0x41a, 0x401);
  513. // Digital Rear Output + Rear Volume
  514. OP(0, 0x066, 0x0c0, 0x419, 0x400);
  515. OP(0, 0x067, 0x0c0, 0x41a, 0x401);
  516. // Audigy Drive, Headphone out
  517. OP(6, 0x64, 0x0c0, 0x0c0, 0x400);
  518. OP(6, 0x65, 0x0c0, 0x0c0, 0x401);
  519. // ac97 Recording
  520. OP(6, 0x76, 0x0c0, 0x0c0, 0x40);
  521. OP(6, 0x77, 0x0c0, 0x0c0, 0x41);
  522. // Center = sub = Left/2 + Right/2
  523. OP(0xe, 0x400, 0x401, 0xcd, 0x400);
  524. // center/sub Volume (master)
  525. OP(0, 0x06a, 0x0c0, 0x408, 0x400);
  526. OP(0, 0x06b, 0x0c0, 0x409, 0x400);
  527. // Digital center/sub Volume (master)
  528. OP(0, 0x062, 0x0c0, 0x408, 0x400);
  529. OP(0, 0x063, 0x0c0, 0x409, 0x400);
  530. ROUTING_PATCH_START(rpatch, "Routing");
  531. ROUTING_PATCH_END(rpatch);
  532. /* delimiter patch */
  533. patch = PATCH(mgr, patch_n);
  534. patch->code_size = 0;
  535. sblive_writeptr(card, 0x53, 0, 0);
  536. } else {
  537. for (i = 0; i < 512 ; i++)
  538. OP(6, 0x40, 0x40, 0x40, 0x40);
  539. for (i = 0; i < 256; i++)
  540. sblive_writeptr_tag(card, 0,
  541. FXGPREGBASE + i, 0,
  542. TANKMEMADDRREGBASE + i, 0,
  543. TAGLIST_END);
  544. pc = 0;
  545. //first free GPR = 0x11b
  546. /* FX volume correction and Volume control*/
  547. INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
  548. GET_OUTPUT_GPR(patch, 0x100, 0x0);
  549. GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
  550. GET_DYNAMIC_GPR(patch, 0x112);
  551. OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
  552. OP(0, 0x100, 0x040, 0x112, 0x106); //*vol
  553. INPUT_PATCH_END(patch);
  554. INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
  555. GET_OUTPUT_GPR(patch, 0x101, 0x1);
  556. GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
  557. GET_DYNAMIC_GPR(patch, 0x112);
  558. OP(4, 0x112, 0x40, PCM_IN_R, 0x44);
  559. OP(0, 0x101, 0x040, 0x112, 0x107);
  560. INPUT_PATCH_END(patch);
  561. // CD-Digital In Volume control
  562. INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
  563. GET_OUTPUT_GPR(patch, 0x10c, 0x12);
  564. GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
  565. OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
  566. INPUT_PATCH_END(patch);
  567. INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
  568. GET_OUTPUT_GPR(patch, 0x10e, 0x13);
  569. GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
  570. OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
  571. INPUT_PATCH_END(patch);
  572. //Volume Correction for Multi-channel Inputs
  573. INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
  574. patch->input=patch->output=0x3F00;
  575. GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
  576. GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
  577. GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
  578. GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
  579. GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
  580. GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
  581. OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
  582. OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
  583. OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
  584. OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
  585. OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
  586. OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
  587. INPUT_PATCH_END(patch);
  588. //Routing patch start
  589. ROUTING_PATCH_START(rpatch, "Routing");
  590. GET_INPUT_GPR(rpatch, 0x100, 0x0);
  591. GET_INPUT_GPR(rpatch, 0x101, 0x1);
  592. GET_INPUT_GPR(rpatch, 0x10c, 0x12);
  593. GET_INPUT_GPR(rpatch, 0x10e, 0x13);
  594. GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
  595. GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
  596. GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
  597. GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
  598. GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
  599. GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
  600. GET_DYNAMIC_GPR(rpatch, 0x102);
  601. GET_DYNAMIC_GPR(rpatch, 0x103);
  602. GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
  603. GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
  604. GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
  605. GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
  606. /* input buffer */
  607. OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
  608. OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
  609. /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
  610. OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
  611. CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
  612. CONNECT(PCM_IN_L, AC97_FRONT_L);
  613. CONNECT(SPDIF_CD_L, AC97_FRONT_L);
  614. OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
  615. CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
  616. CONNECT(PCM_IN_R, AC97_FRONT_R);
  617. CONNECT(SPDIF_CD_R, AC97_FRONT_R);
  618. /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */
  619. OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
  620. OP(6, 0x104, 0x104, 0x10c, 0x102);
  621. CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
  622. CONNECT(AC97_IN_L, ANALOG_REAR_L);
  623. CONNECT(PCM_IN_L, ANALOG_REAR_L);
  624. CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
  625. CONNECT(PCM1_IN_L, ANALOG_REAR_L);
  626. OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
  627. OP(6, 0x105, 0x105, 0x10e, 0x103);
  628. CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
  629. CONNECT(AC97_IN_R, ANALOG_REAR_R);
  630. CONNECT(PCM_IN_R, ANALOG_REAR_R);
  631. CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
  632. CONNECT(PCM1_IN_R, ANALOG_REAR_R);
  633. /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
  634. OP(6, 0x10b, 0x100, 0x102, 0x10c);
  635. OP(6, 0x10b, 0x10b, 0x113, 0x40);
  636. CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
  637. CONNECT(PCM_IN_L, DIGITAL_OUT_L);
  638. CONNECT(AC97_IN_L, DIGITAL_OUT_L);
  639. CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
  640. OP(6, 0x10a, 0x101, 0x103, 0x10e);
  641. OP(6, 0x10b, 0x10b, 0x114, 0x40);
  642. CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
  643. CONNECT(PCM_IN_R, DIGITAL_OUT_R);
  644. CONNECT(AC97_IN_R, DIGITAL_OUT_R);
  645. CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
  646. /* AC97 In --> ADC Recording Buffer */
  647. OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
  648. CONNECT(AC97_IN_L, ADC_REC_L);
  649. OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
  650. CONNECT(AC97_IN_R, ADC_REC_R);
  651. /* fx12:Analog-Center */
  652. OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
  653. CONNECT(MULTI_CENTER, ANALOG_CENTER);
  654. /* fx11:Analog-LFE */
  655. OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
  656. CONNECT(MULTI_LFE, ANALOG_LFE);
  657. /* fx12:Digital-Center */
  658. OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
  659. CONNECT(MULTI_CENTER, DIGITAL_CENTER);
  660. /* fx11:Analog-LFE */
  661. OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
  662. CONNECT(MULTI_LFE, DIGITAL_LFE);
  663. ROUTING_PATCH_END(rpatch);
  664. // Rear volume control
  665. OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
  666. GET_INPUT_GPR(patch, 0x104, 0x8);
  667. GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
  668. OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
  669. OUTPUT_PATCH_END(patch);
  670. OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
  671. GET_INPUT_GPR(patch, 0x105, 0x9);
  672. GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
  673. OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
  674. OUTPUT_PATCH_END(patch);
  675. //Master volume control on front-digital
  676. OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
  677. GET_INPUT_GPR(patch, 0x10a, 0x2);
  678. GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
  679. OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
  680. OUTPUT_PATCH_END(patch);
  681. OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
  682. GET_INPUT_GPR(patch, 0x10b, 0x3);
  683. GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
  684. OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
  685. OUTPUT_PATCH_END(patch);
  686. /* delimiter patch */
  687. patch = PATCH(mgr, patch_n);
  688. patch->code_size = 0;
  689. sblive_writeptr(card, DBG, 0, 0);
  690. }
  691. spin_lock_init(&mgr->lock);
  692. // Set up Volume controls, try to keep this the same for both Audigy and Live
  693. //Master volume
  694. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][0] = 8;
  695. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][1] = 9;
  696. left = card->ac97->mixer_state[SOUND_MIXER_VOLUME] & 0xff;
  697. right = (card->ac97->mixer_state[SOUND_MIXER_VOLUME] >> 8) & 0xff;
  698. emu10k1_set_volume_gpr(card, 8, left, 1 << card->ac97->bit_resolution);
  699. emu10k1_set_volume_gpr(card, 9, right, 1 << card->ac97->bit_resolution);
  700. //Rear volume
  701. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][0] = 0x19;
  702. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][1] = 0x1a;
  703. left = right = 67;
  704. card->ac97->mixer_state[SOUND_MIXER_OGAIN] = (right << 8) | left;
  705. card->ac97->supported_mixers |= SOUND_MASK_OGAIN;
  706. card->ac97->stereo_mixers |= SOUND_MASK_OGAIN;
  707. emu10k1_set_volume_gpr(card, 0x19, left, VOL_5BIT);
  708. emu10k1_set_volume_gpr(card, 0x1a, right, VOL_5BIT);
  709. //PCM Volume
  710. mgr->ctrl_gpr[SOUND_MIXER_PCM][0] = 6;
  711. mgr->ctrl_gpr[SOUND_MIXER_PCM][1] = 7;
  712. left = card->ac97->mixer_state[SOUND_MIXER_PCM] & 0xff;
  713. right = (card->ac97->mixer_state[SOUND_MIXER_PCM] >> 8) & 0xff;
  714. emu10k1_set_volume_gpr(card, 6, left, VOL_5BIT);
  715. emu10k1_set_volume_gpr(card, 7, right, VOL_5BIT);
  716. //CD-Digital Volume
  717. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][0] = 0xd;
  718. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][1] = 0xf;
  719. left = right = 67;
  720. card->ac97->mixer_state[SOUND_MIXER_DIGITAL1] = (right << 8) | left;
  721. card->ac97->supported_mixers |= SOUND_MASK_DIGITAL1;
  722. card->ac97->stereo_mixers |= SOUND_MASK_DIGITAL1;
  723. emu10k1_set_volume_gpr(card, 0xd, left, VOL_5BIT);
  724. emu10k1_set_volume_gpr(card, 0xf, right, VOL_5BIT);
  725. //hard wire the ac97's pcm, pcm volume is done above using dsp code.
  726. if (card->is_audigy)
  727. //for Audigy, we mute it and use the philips 6 channel DAC instead
  728. emu10k1_ac97_write(card->ac97, 0x18, 0x8000);
  729. else
  730. //For the Live we hardwire it to full volume
  731. emu10k1_ac97_write(card->ac97, 0x18, 0x0);
  732. //remove it from the ac97_codec's control
  733. card->ac97_supported_mixers &= ~SOUND_MASK_PCM;
  734. card->ac97_stereo_mixers &= ~SOUND_MASK_PCM;
  735. //set Igain to 0dB by default, maybe consider hardwiring it here.
  736. emu10k1_ac97_write(card->ac97, AC97_RECORD_GAIN, 0x0000);
  737. card->ac97->mixer_state[SOUND_MIXER_IGAIN] = 0x101;
  738. return 0;
  739. }
  740. static int __devinit hw_init(struct emu10k1_card *card)
  741. {
  742. int nCh;
  743. u32 pagecount; /* tmp */
  744. int ret;
  745. /* Disable audio and lock cache */
  746. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  747. /* Reset recording buffers */
  748. sblive_writeptr_tag(card, 0,
  749. MICBS, ADCBS_BUFSIZE_NONE,
  750. MICBA, 0,
  751. FXBS, ADCBS_BUFSIZE_NONE,
  752. FXBA, 0,
  753. ADCBS, ADCBS_BUFSIZE_NONE,
  754. ADCBA, 0,
  755. TAGLIST_END);
  756. /* Disable channel interrupt */
  757. emu10k1_writefn0(card, INTE, 0);
  758. sblive_writeptr_tag(card, 0,
  759. CLIEL, 0,
  760. CLIEH, 0,
  761. SOLEL, 0,
  762. SOLEH, 0,
  763. TAGLIST_END);
  764. if (card->is_audigy) {
  765. sblive_writeptr_tag(card,0,
  766. 0x5e,0xf00,
  767. 0x5f,0x3,
  768. TAGLIST_END);
  769. }
  770. /* Init envelope engine */
  771. for (nCh = 0; nCh < NUM_G; nCh++) {
  772. sblive_writeptr_tag(card, nCh,
  773. DCYSUSV, 0,
  774. IP, 0,
  775. VTFT, 0xffff,
  776. CVCF, 0xffff,
  777. PTRX, 0,
  778. //CPF, 0,
  779. CCR, 0,
  780. PSST, 0,
  781. DSL, 0x10,
  782. CCCA, 0,
  783. Z1, 0,
  784. Z2, 0,
  785. FXRT, 0xd01c0000,
  786. ATKHLDM, 0,
  787. DCYSUSM, 0,
  788. IFATN, 0xffff,
  789. PEFE, 0,
  790. FMMOD, 0,
  791. TREMFRQ, 24, /* 1 Hz */
  792. FM2FRQ2, 24, /* 1 Hz */
  793. TEMPENV, 0,
  794. /*** These are last so OFF prevents writing ***/
  795. LFOVAL2, 0,
  796. LFOVAL1, 0,
  797. ATKHLDV, 0,
  798. ENVVOL, 0,
  799. ENVVAL, 0,
  800. TAGLIST_END);
  801. sblive_writeptr(card, CPF, nCh, 0);
  802. /*
  803. Audigy FXRT initialization
  804. reversed eng'd, may not be accurate.
  805. */
  806. if (card->is_audigy) {
  807. sblive_writeptr_tag(card,nCh,
  808. 0x4c,0x0,
  809. 0x4d,0x0,
  810. 0x4e,0x0,
  811. 0x4f,0x0,
  812. A_FXRT1, 0x3f3f3f3f,
  813. A_FXRT2, 0x3f3f3f3f,
  814. A_SENDAMOUNTS, 0,
  815. TAGLIST_END);
  816. }
  817. }
  818. /*
  819. ** Init to 0x02109204 :
  820. ** Clock accuracy = 0 (1000ppm)
  821. ** Sample Rate = 2 (48kHz)
  822. ** Audio Channel = 1 (Left of 2)
  823. ** Source Number = 0 (Unspecified)
  824. ** Generation Status = 1 (Original for Cat Code 12)
  825. ** Cat Code = 12 (Digital Signal Mixer)
  826. ** Mode = 0 (Mode 0)
  827. ** Emphasis = 0 (None)
  828. ** CP = 1 (Copyright unasserted)
  829. ** AN = 0 (Digital audio)
  830. ** P = 0 (Consumer)
  831. */
  832. sblive_writeptr_tag(card, 0,
  833. /* SPDIF0 */
  834. SPCS0, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  835. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  836. /* SPDIF1 */
  837. SPCS1, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  838. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  839. /* SPDIF2 & SPDIF3 */
  840. SPCS2, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  841. SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  842. TAGLIST_END);
  843. if (card->is_audigy && (card->chiprev == 4)) {
  844. /* Hacks for Alice3 to work independent of haP16V driver */
  845. u32 tmp;
  846. //Setup SRCMulti_I2S SamplingRate
  847. tmp = sblive_readptr(card, A_SPDIF_SAMPLERATE, 0);
  848. tmp &= 0xfffff1ff;
  849. tmp |= (0x2<<9);
  850. sblive_writeptr(card, A_SPDIF_SAMPLERATE, 0, tmp);
  851. /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
  852. emu10k1_writefn0(card, 0x20, 0x600000);
  853. emu10k1_writefn0(card, 0x24, 0x14);
  854. /* Setup SRCMulti Input Audio Enable */
  855. emu10k1_writefn0(card, 0x20, 0x6E0000);
  856. emu10k1_writefn0(card, 0x24, 0xFF00FF00);
  857. }
  858. ret = fx_init(card); /* initialize effects engine */
  859. if (ret < 0)
  860. return ret;
  861. card->tankmem.size = 0;
  862. card->virtualpagetable.size = MAXPAGES * sizeof(u32);
  863. card->virtualpagetable.addr = pci_alloc_consistent(card->pci_dev, card->virtualpagetable.size, &card->virtualpagetable.dma_handle);
  864. if (card->virtualpagetable.addr == NULL) {
  865. ERROR();
  866. ret = -ENOMEM;
  867. goto err0;
  868. }
  869. card->silentpage.size = EMUPAGESIZE;
  870. card->silentpage.addr = pci_alloc_consistent(card->pci_dev, card->silentpage.size, &card->silentpage.dma_handle);
  871. if (card->silentpage.addr == NULL) {
  872. ERROR();
  873. ret = -ENOMEM;
  874. goto err1;
  875. }
  876. for (pagecount = 0; pagecount < MAXPAGES; pagecount++)
  877. ((u32 *) card->virtualpagetable.addr)[pagecount] = cpu_to_le32(((u32) card->silentpage.dma_handle * 2) | pagecount);
  878. /* Init page table & tank memory base register */
  879. sblive_writeptr_tag(card, 0,
  880. PTB, (u32) card->virtualpagetable.dma_handle,
  881. TCB, 0,
  882. TCBS, 0,
  883. TAGLIST_END);
  884. for (nCh = 0; nCh < NUM_G; nCh++) {
  885. sblive_writeptr_tag(card, nCh,
  886. MAPA, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  887. MAPB, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  888. TAGLIST_END);
  889. }
  890. /* Hokay, now enable the AUD bit */
  891. /* Enable Audio = 1 */
  892. /* Mute Disable Audio = 0 */
  893. /* Lock Tank Memory = 1 */
  894. /* Lock Sound Memory = 0 */
  895. /* Auto Mute = 1 */
  896. if (card->is_audigy) {
  897. if (card->chiprev == 4)
  898. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AC3ENABLE_CDSPDIF | HCFG_AC3ENABLE_GPSPDIF | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  899. else
  900. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  901. } else {
  902. if (card->model == 0x20 || card->model == 0xc400 ||
  903. (card->model == 0x21 && card->chiprev < 6))
  904. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
  905. else
  906. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  907. }
  908. /* Enable Vol_Ctrl irqs */
  909. emu10k1_irq_enable(card, INTE_VOLINCRENABLE | INTE_VOLDECRENABLE | INTE_MUTEENABLE | INTE_FXDSPENABLE);
  910. if (card->is_audigy && (card->chiprev == 4)) {
  911. /* Unmute Analog now. Set GPO6 to 1 for Apollo.
  912. * This has to be done after init ALice3 I2SOut beyond 48KHz.
  913. * So, sequence is important. */
  914. u32 tmp = emu10k1_readfn0(card, A_IOCFG);
  915. tmp |= 0x0040;
  916. emu10k1_writefn0(card, A_IOCFG, tmp);
  917. }
  918. /* FIXME: TOSLink detection */
  919. card->has_toslink = 0;
  920. /* Initialize digital passthrough variables */
  921. card->pt.pos_gpr = card->pt.intr_gpr = card->pt.enable_gpr = -1;
  922. card->pt.selected = 0;
  923. card->pt.state = PT_STATE_INACTIVE;
  924. card->pt.spcs_to_use = 0x01;
  925. card->pt.patch_name = "AC3pass";
  926. card->pt.intr_gpr_name = "count";
  927. card->pt.enable_gpr_name = "enable";
  928. card->pt.pos_gpr_name = "ptr";
  929. spin_lock_init(&card->pt.lock);
  930. init_waitqueue_head(&card->pt.wait);
  931. /* tmp = sblive_readfn0(card, HCFG);
  932. if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
  933. sblive_writefn0(card, HCFG, tmp | 0x800);
  934. udelay(512);
  935. if (tmp != (sblive_readfn0(card, HCFG) & ~0x800)) {
  936. card->has_toslink = 1;
  937. sblive_writefn0(card, HCFG, tmp);
  938. }
  939. }
  940. */
  941. return 0;
  942. err1:
  943. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  944. err0:
  945. fx_cleanup(&card->mgr);
  946. return ret;
  947. }
  948. static int __devinit emu10k1_init(struct emu10k1_card *card)
  949. {
  950. /* Init Card */
  951. if (hw_init(card) < 0)
  952. return -1;
  953. voice_init(card);
  954. timer_init(card);
  955. addxmgr_init(card);
  956. DPD(2, " hw control register -> %#x\n", emu10k1_readfn0(card, HCFG));
  957. return 0;
  958. }
  959. static void emu10k1_cleanup(struct emu10k1_card *card)
  960. {
  961. int ch;
  962. emu10k1_writefn0(card, INTE, 0);
  963. /** Shutdown the chip **/
  964. for (ch = 0; ch < NUM_G; ch++)
  965. sblive_writeptr(card, DCYSUSV, ch, 0);
  966. for (ch = 0; ch < NUM_G; ch++) {
  967. sblive_writeptr_tag(card, ch,
  968. VTFT, 0,
  969. CVCF, 0,
  970. PTRX, 0,
  971. //CPF, 0,
  972. TAGLIST_END);
  973. sblive_writeptr(card, CPF, ch, 0);
  974. }
  975. /* Disable audio and lock cache */
  976. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  977. sblive_writeptr_tag(card, 0,
  978. PTB, 0,
  979. /* Reset recording buffers */
  980. MICBS, ADCBS_BUFSIZE_NONE,
  981. MICBA, 0,
  982. FXBS, ADCBS_BUFSIZE_NONE,
  983. FXBA, 0,
  984. FXWC, 0,
  985. ADCBS, ADCBS_BUFSIZE_NONE,
  986. ADCBA, 0,
  987. TCBS, 0,
  988. TCB, 0,
  989. DBG, 0x8000,
  990. /* Disable channel interrupt */
  991. CLIEL, 0,
  992. CLIEH, 0,
  993. SOLEL, 0,
  994. SOLEH, 0,
  995. TAGLIST_END);
  996. if (card->is_audigy)
  997. sblive_writeptr(card, 0, A_DBG, A_DBG_SINGLE_STEP);
  998. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  999. pci_free_consistent(card->pci_dev, card->silentpage.size, card->silentpage.addr, card->silentpage.dma_handle);
  1000. if(card->tankmem.size != 0)
  1001. pci_free_consistent(card->pci_dev, card->tankmem.size, card->tankmem.addr, card->tankmem.dma_handle);
  1002. /* release patch storage memory */
  1003. fx_cleanup(&card->mgr);
  1004. }
  1005. /* Driver initialization routine */
  1006. static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
  1007. {
  1008. struct emu10k1_card *card;
  1009. u32 subsysvid;
  1010. int ret;
  1011. if (pci_set_dma_mask(pci_dev, EMU10K1_DMA_MASK)) {
  1012. printk(KERN_ERR "emu10k1: architecture does not support 29bit PCI busmaster DMA\n");
  1013. return -ENODEV;
  1014. }
  1015. if (pci_enable_device(pci_dev))
  1016. return -EIO;
  1017. pci_set_master(pci_dev);
  1018. if ((card = kmalloc(sizeof(struct emu10k1_card), GFP_KERNEL)) == NULL) {
  1019. printk(KERN_ERR "emu10k1: out of memory\n");
  1020. return -ENOMEM;
  1021. }
  1022. memset(card, 0, sizeof(struct emu10k1_card));
  1023. card->iobase = pci_resource_start(pci_dev, 0);
  1024. card->length = pci_resource_len(pci_dev, 0);
  1025. if (request_region(card->iobase, card->length, card_names[pci_id->driver_data]) == NULL) {
  1026. printk(KERN_ERR "emu10k1: IO space in use\n");
  1027. ret = -EBUSY;
  1028. goto err_region;
  1029. }
  1030. pci_set_drvdata(pci_dev, card);
  1031. card->irq = pci_dev->irq;
  1032. card->pci_dev = pci_dev;
  1033. /* Reserve IRQ Line */
  1034. if (request_irq(card->irq, emu10k1_interrupt, SA_SHIRQ, card_names[pci_id->driver_data], card)) {
  1035. printk(KERN_ERR "emu10k1: IRQ in use\n");
  1036. ret = -EBUSY;
  1037. goto err_irq;
  1038. }
  1039. pci_read_config_byte(pci_dev, PCI_REVISION_ID, &card->chiprev);
  1040. pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &card->model);
  1041. printk(KERN_INFO "emu10k1: %s rev %d model %#04x found, IO at %#04lx-%#04lx, IRQ %d\n",
  1042. card_names[pci_id->driver_data], card->chiprev, card->model, card->iobase,
  1043. card->iobase + card->length - 1, card->irq);
  1044. if (pci_id->device == PCI_DEVICE_ID_CREATIVE_AUDIGY)
  1045. card->is_audigy = 1;
  1046. pci_read_config_dword(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &subsysvid);
  1047. card->is_aps = (subsysvid == EMU_APS_SUBID);
  1048. spin_lock_init(&card->lock);
  1049. mutex_init(&card->open_sem);
  1050. card->open_mode = 0;
  1051. init_waitqueue_head(&card->open_wait);
  1052. ret = emu10k1_audio_init(card);
  1053. if (ret < 0) {
  1054. printk(KERN_ERR "emu10k1: cannot initialize audio devices\n");
  1055. goto err_audio;
  1056. }
  1057. ret = emu10k1_mixer_init(card);
  1058. if (ret < 0) {
  1059. printk(KERN_ERR "emu10k1: cannot initialize AC97 codec\n");
  1060. goto err_mixer;
  1061. }
  1062. ret = emu10k1_midi_init(card);
  1063. if (ret < 0) {
  1064. printk(KERN_ERR "emu10k1: cannot register midi device\n");
  1065. goto err_midi;
  1066. }
  1067. ret = emu10k1_init(card);
  1068. if (ret < 0) {
  1069. printk(KERN_ERR "emu10k1: cannot initialize device\n");
  1070. goto err_emu10k1_init;
  1071. }
  1072. if (card->is_aps)
  1073. emu10k1_ecard_init(card);
  1074. ret = emu10k1_register_devices(card);
  1075. if (ret < 0)
  1076. goto err_register;
  1077. /* proc entries must be created after registering devices, as
  1078. * emu10k1_info_proc prints card->audio_dev &co. */
  1079. ret = emu10k1_proc_init(card);
  1080. if (ret < 0) {
  1081. printk(KERN_ERR "emu10k1: cannot initialize proc directory\n");
  1082. goto err_proc;
  1083. }
  1084. list_add(&card->list, &emu10k1_devs);
  1085. return 0;
  1086. err_proc:
  1087. emu10k1_unregister_devices(card);
  1088. err_register:
  1089. emu10k1_cleanup(card);
  1090. err_emu10k1_init:
  1091. emu10k1_midi_cleanup(card);
  1092. err_midi:
  1093. emu10k1_mixer_cleanup(card);
  1094. err_mixer:
  1095. emu10k1_audio_cleanup(card);
  1096. err_audio:
  1097. free_irq(card->irq, card);
  1098. err_irq:
  1099. release_region(card->iobase, card->length);
  1100. pci_set_drvdata(pci_dev, NULL);
  1101. err_region:
  1102. kfree(card);
  1103. return ret;
  1104. }
  1105. static void __devexit emu10k1_remove(struct pci_dev *pci_dev)
  1106. {
  1107. struct emu10k1_card *card = pci_get_drvdata(pci_dev);
  1108. list_del(&card->list);
  1109. emu10k1_unregister_devices(card);
  1110. emu10k1_cleanup(card);
  1111. emu10k1_midi_cleanup(card);
  1112. emu10k1_mixer_cleanup(card);
  1113. emu10k1_proc_cleanup(card);
  1114. emu10k1_audio_cleanup(card);
  1115. free_irq(card->irq, card);
  1116. release_region(card->iobase, card->length);
  1117. kfree(card);
  1118. pci_set_drvdata(pci_dev, NULL);
  1119. }
  1120. MODULE_AUTHOR("Bertrand Lee, Cai Ying. (Email to: emu10k1-devel@lists.sourceforge.net)");
  1121. MODULE_DESCRIPTION("Creative EMU10K1 PCI Audio Driver v" DRIVER_VERSION "\nCopyright (C) 1999 Creative Technology Ltd.");
  1122. MODULE_LICENSE("GPL");
  1123. static struct pci_driver emu10k1_pci_driver = {
  1124. .name = "emu10k1",
  1125. .id_table = emu10k1_pci_tbl,
  1126. .probe = emu10k1_probe,
  1127. .remove = __devexit_p(emu10k1_remove),
  1128. };
  1129. static int __init emu10k1_init_module(void)
  1130. {
  1131. printk(KERN_INFO "Creative EMU10K1 PCI Audio Driver, version " DRIVER_VERSION ", " __TIME__ " " __DATE__ "\n");
  1132. return pci_register_driver(&emu10k1_pci_driver);
  1133. }
  1134. static void __exit emu10k1_cleanup_module(void)
  1135. {
  1136. pci_unregister_driver(&emu10k1_pci_driver);
  1137. return;
  1138. }
  1139. module_init(emu10k1_init_module);
  1140. module_exit(emu10k1_cleanup_module);
  1141. #ifdef EMU10K1_SEQUENCER
  1142. /* in midi.c */
  1143. extern int emu10k1_seq_midi_open(int dev, int mode,
  1144. void (*input)(int dev, unsigned char midi_byte),
  1145. void (*output)(int dev));
  1146. extern void emu10k1_seq_midi_close(int dev);
  1147. extern int emu10k1_seq_midi_out(int dev, unsigned char midi_byte);
  1148. extern int emu10k1_seq_midi_start_read(int dev);
  1149. extern int emu10k1_seq_midi_end_read(int dev);
  1150. extern void emu10k1_seq_midi_kick(int dev);
  1151. extern int emu10k1_seq_midi_buffer_status(int dev);
  1152. static struct midi_operations emu10k1_midi_operations =
  1153. {
  1154. THIS_MODULE,
  1155. {"EMU10K1 MIDI", 0, 0, SNDCARD_EMU10K1},
  1156. &std_midi_synth,
  1157. {0},
  1158. emu10k1_seq_midi_open,
  1159. emu10k1_seq_midi_close,
  1160. NULL,
  1161. emu10k1_seq_midi_out,
  1162. emu10k1_seq_midi_start_read,
  1163. emu10k1_seq_midi_end_read,
  1164. emu10k1_seq_midi_kick,
  1165. NULL,
  1166. emu10k1_seq_midi_buffer_status,
  1167. NULL
  1168. };
  1169. #endif