main.c 41 KB

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