main.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:33k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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.19 Real fix for kernel with highmem support (cast dma_handle to u32).
  82.  *     Fix recording buffering parameters calculation.
  83.  *     Use unsigned long for variables in bit ops.
  84.  *     0.20 Fixed recording startup
  85.  *     Fixed timer rate setting (it's a 16-bit register)
  86.  *********************************************************************/
  87. /* These are only included once per module */
  88. #include <linux/version.h>
  89. #include <linux/module.h>
  90. #include <linux/slab.h>
  91. #include <linux/init.h>
  92. #include <linux/delay.h>
  93. #include <linux/proc_fs.h>
  94. #include "hwaccess.h"
  95. #include "8010.h"
  96. #include "efxmgr.h"
  97. #include "cardwo.h"
  98. #include "cardwi.h"
  99. #include "cardmo.h"
  100. #include "cardmi.h"
  101. #include "recmgr.h"
  102. #include "ecard.h"
  103. #ifdef EMU10K1_SEQUENCER
  104. #define MIDI_SYNTH_NAME "EMU10K1 MIDI"
  105. #define MIDI_SYNTH_CAPS SYNTH_CAP_INPUT
  106.  
  107. #include "../sound_config.h"
  108. #include "../midi_synth.h"
  109. /* this should be in dev_table.h */
  110. #define SNDCARD_EMU10K1 46
  111. #endif
  112.  
  113. #define DRIVER_VERSION "0.20"
  114. /* the emu10k1 _seems_ to only supports 29 bit (512MiB) bit bus master */
  115. #define EMU10K1_DMA_MASK                0x1fffffff /* 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. #define EMU_APS_SUBID 0x40011102
  123.  
  124. enum {
  125. EMU10K1 = 0,
  126. };
  127. static char *card_names[] __devinitdata = {
  128. "EMU10K1",
  129. };
  130. static struct pci_device_id emu10k1_pci_tbl[] = {
  131. {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_EMU10K1,
  132.  PCI_ANY_ID, PCI_ANY_ID, 0, 0, EMU10K1},
  133. {0,}
  134. };
  135. MODULE_DEVICE_TABLE(pci, emu10k1_pci_tbl);
  136. /* Global var instantiation */
  137. LIST_HEAD(emu10k1_devs);
  138. extern struct file_operations emu10k1_audio_fops;
  139. extern struct file_operations emu10k1_mixer_fops;
  140. extern struct file_operations emu10k1_midi_fops;
  141. #ifdef EMU10K1_SEQUENCER
  142. static struct midi_operations emu10k1_midi_operations;
  143. #endif
  144. extern void emu10k1_interrupt(int, void *, struct pt_regs *s);
  145. static int __devinit emu10k1_audio_init(struct emu10k1_card *card)
  146. {
  147. card->audio_dev = register_sound_dsp(&emu10k1_audio_fops, -1);
  148. if (card->audio_dev < 0) {
  149. printk(KERN_ERR "emu10k1: cannot register first audio device!n");
  150. goto err_dev;
  151. }
  152. card->audio_dev1 = register_sound_dsp(&emu10k1_audio_fops, -1);
  153. if (card->audio_dev1 < 0) {
  154. printk(KERN_ERR "emu10k1: cannot register second audio device!n");
  155. goto err_dev1;
  156. }
  157. /* Assign default playback voice parameters */
  158. card->mchannel_fx = 8;
  159. /* mono voice */
  160. card->waveout.send_a[0] = 0xff;
  161. card->waveout.send_b[0] = 0xff;
  162. card->waveout.send_c[0] = 0x00;
  163. card->waveout.send_d[0] = 0x00;
  164. card->waveout.send_routing[0] = 0x3210;
  165. /* stereo voice */
  166. /* left */
  167. card->waveout.send_a[1] = 0xff;
  168. card->waveout.send_b[1] = 0x00;
  169. card->waveout.send_c[1] = 0x00;
  170. card->waveout.send_d[1] = 0x00;
  171. card->waveout.send_routing[1] = 0x3210;
  172. /* right */
  173. card->waveout.send_a[2] = 0x00;
  174. card->waveout.send_b[2] = 0xff;
  175. card->waveout.send_c[2] = 0x00;
  176. card->waveout.send_d[2] = 0x00;
  177. card->waveout.send_routing[2] = 0x3210;
  178. /* Assign default recording parameters */
  179. /* FIXME */
  180. if (card->is_aps)
  181. card->wavein.recsrc = WAVERECORD_FX;
  182. else
  183. card->wavein.recsrc = WAVERECORD_AC97;
  184. card->wavein.fxwc = 0x0003;
  185. return 0;
  186. err_dev1:
  187. unregister_sound_dsp(card->audio_dev);
  188. err_dev:
  189. return -ENODEV;
  190. }
  191. static void __devinit emu10k1_audio_cleanup(struct emu10k1_card *card)
  192. {
  193. unregister_sound_dsp(card->audio_dev1);
  194. unregister_sound_dsp(card->audio_dev);
  195. }
  196. static int __devinit emu10k1_mixer_init(struct emu10k1_card *card)
  197. {
  198. char s[32];
  199. struct ac97_codec *codec = &card->ac97;
  200. card->ac97.dev_mixer = register_sound_mixer(&emu10k1_mixer_fops, -1);
  201. if (card->ac97.dev_mixer < 0) {
  202. printk(KERN_ERR "emu10k1: cannot register mixer devicen");
  203. return -EIO;
  204.         }
  205. card->ac97.private_data = card;
  206. if (!card->is_aps) {
  207. card->ac97.id = 0;
  208. card->ac97.codec_read = emu10k1_ac97_read;
  209.          card->ac97.codec_write = emu10k1_ac97_write;
  210. if (ac97_probe_codec (&card->ac97) == 0) {
  211. printk(KERN_ERR "emu10k1: unable to probe AC97 codecn");
  212. goto err_out;
  213. }
  214. /* 5.1: Enable the additional AC97 Slots and unmute extra channels on AC97 codec */
  215. if (codec->codec_read(codec, AC97_EXTENDED_ID) & 0x0080){
  216. printk(KERN_INFO "emu10k1: SBLive! 5.1 card detectedn"); 
  217. sblive_writeptr(card, AC97SLOT, 0, AC97SLOT_CNTR | AC97SLOT_LFE);
  218. codec->codec_write(codec, AC97_SURROUND_MASTER, 0x0);
  219. }
  220. // Force 5bit:     
  221. //card->ac97.bit_resolution=5;
  222. if (!proc_mkdir ("driver/emu10k1", 0)) {
  223. printk(KERN_ERR "emu10k1: unable to create proc directory driver/emu10k1n");
  224. goto err_out;
  225. }
  226. sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
  227. if (!proc_mkdir (s, 0)) {
  228. printk(KERN_ERR "emu10k1: unable to create proc directory %sn", s);
  229. goto err_emu10k1_proc;
  230. }
  231. sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
  232. if (!create_proc_read_entry (s, 0, 0, ac97_read_proc, &card->ac97)) {
  233. printk(KERN_ERR "emu10k1: unable to create proc entry %sn", s);
  234. goto err_ac97_proc;
  235. }
  236. /* these will store the original values and never be modified */
  237. card->ac97_supported_mixers = card->ac97.supported_mixers;
  238. card->ac97_stereo_mixers = card->ac97.stereo_mixers;
  239. }
  240. return 0;
  241.  err_ac97_proc:
  242. sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
  243. remove_proc_entry(s, NULL);
  244.  err_emu10k1_proc:
  245. remove_proc_entry("driver/emu10k1", NULL);
  246.  err_out:
  247. unregister_sound_mixer (card->ac97.dev_mixer);
  248. return -EIO;
  249. }
  250. static void __devinit emu10k1_mixer_cleanup(struct emu10k1_card *card)
  251. {
  252. char s[32];
  253. if (!card->is_aps) {
  254. sprintf(s, "driver/emu10k1/%s/ac97", card->pci_dev->slot_name);
  255. remove_proc_entry(s, NULL);
  256. sprintf(s, "driver/emu10k1/%s", card->pci_dev->slot_name);
  257. remove_proc_entry(s, NULL);
  258. remove_proc_entry("driver/emu10k1", NULL);
  259. }
  260. unregister_sound_mixer (card->ac97.dev_mixer);
  261. }
  262. static int __devinit emu10k1_midi_init(struct emu10k1_card *card)
  263. {
  264. int ret;
  265. card->midi_dev = register_sound_midi(&emu10k1_midi_fops, -1);
  266. if (card->midi_dev < 0) {
  267.                 printk(KERN_ERR "emu10k1: cannot register midi device!n");
  268. return -ENODEV;
  269.         }
  270. card->mpuout = kmalloc(sizeof(struct emu10k1_mpuout), GFP_KERNEL);
  271. if (card->mpuout == NULL) {
  272. printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuout: out of memoryn");
  273. ret = -ENOMEM;
  274. goto err_out1;
  275. }
  276. memset(card->mpuout, 0, sizeof(struct emu10k1_mpuout));
  277. card->mpuout->intr = 1;
  278. card->mpuout->status = FLAGS_AVAILABLE;
  279. card->mpuout->state = CARDMIDIOUT_STATE_DEFAULT;
  280. tasklet_init(&card->mpuout->tasklet, emu10k1_mpuout_bh, (unsigned long) card);
  281. spin_lock_init(&card->mpuout->lock);
  282. card->mpuin = kmalloc(sizeof(struct emu10k1_mpuin), GFP_KERNEL);
  283. if (card->mpuin == NULL) {
  284. printk(KERN_WARNING "emu10k1: Unable to allocate emu10k1_mpuin: out of memoryn");
  285. ret = -ENOMEM;
  286.                 goto err_out2;
  287. }
  288. memset(card->mpuin, 0, sizeof(struct emu10k1_mpuin));
  289. card->mpuin->status = FLAGS_AVAILABLE;
  290. tasklet_init(&card->mpuin->tasklet, emu10k1_mpuin_bh, (unsigned long) card->mpuin);
  291. spin_lock_init(&card->mpuin->lock);
  292. /* Reset the MPU port */
  293. if (emu10k1_mpu_reset(card) < 0) {
  294. ERROR();
  295. ret = -EIO;
  296. goto err_out3;
  297. }
  298. #ifdef EMU10K1_SEQUENCER
  299. card->seq_dev = sound_alloc_mididev();
  300. if (card->seq_dev == -1)
  301. printk(KERN_WARNING "emu10k1: unable to register sequencer device!");
  302. else {
  303. std_midi_synth.midi_dev = card->seq_dev;
  304. midi_devs[card->seq_dev] = 
  305. (struct midi_operations *)
  306. kmalloc(sizeof(struct midi_operations), GFP_KERNEL);
  307. if (midi_devs[card->seq_dev] == NULL) {
  308. printk(KERN_ERR "emu10k1: unable to allocate memory!");
  309. sound_unload_mididev(card->seq_dev);
  310. card->seq_dev = -1;
  311. return 0;
  312. } else {
  313. memcpy((char *)midi_devs[card->seq_dev], 
  314. (char *)&emu10k1_midi_operations, 
  315. sizeof(struct midi_operations));
  316. midi_devs[card->seq_dev]->devc = card;
  317. sequencer_init();
  318. }
  319. }
  320. card->seq_mididev = 0;
  321. #endif
  322. return 0;
  323. err_out3:
  324. kfree(card->mpuin);
  325. err_out2:
  326. kfree(card->mpuout);
  327. err_out1:
  328. unregister_sound_midi(card->midi_dev);
  329. return ret;
  330. }
  331. static void __devinit emu10k1_midi_cleanup(struct emu10k1_card *card)
  332. {
  333. tasklet_kill(&card->mpuout->tasklet);
  334. kfree(card->mpuout);
  335. tasklet_kill(&card->mpuin->tasklet);
  336. kfree(card->mpuin);
  337. #ifdef EMU10K1_SEQUENCER
  338. if (card->seq_dev > -1) {
  339. kfree(midi_devs[card->seq_dev]);
  340. midi_devs[card->seq_dev] = NULL;
  341. sound_unload_mididev(card->seq_dev);
  342. card->seq_dev = -1;
  343. }
  344. #endif
  345. unregister_sound_midi(card->midi_dev);
  346. }
  347. static void __devinit voice_init(struct emu10k1_card *card)
  348. {
  349. int i;
  350. for (i = 0; i < NUM_G; i++)
  351. card->voicetable[i] = VOICE_USAGE_FREE;
  352. }
  353. static void __devinit timer_init(struct emu10k1_card *card)
  354. {
  355. INIT_LIST_HEAD(&card->timers);
  356. card->timer_delay = TIMER_STOPPED;
  357. card->timer_lock = SPIN_LOCK_UNLOCKED;
  358. }
  359. static void __devinit addxmgr_init(struct emu10k1_card *card)
  360. {
  361. u32 count;
  362. for (count = 0; count < MAXPAGES; count++)
  363. card->emupagetable[count] = 0;
  364. /* Mark first page as used */
  365. /* This page is reserved by the driver */
  366. card->emupagetable[0] = 0x8001;
  367. card->emupagetable[1] = MAXPAGES - 1;
  368. }
  369. static void __devinit fx_cleanup(struct patch_manager *mgr)
  370. {
  371. int i;
  372. for(i = 0; i < mgr->current_pages; i++)
  373. free_page((unsigned long) mgr->patch[i]);
  374. }
  375. static int __devinit fx_init(struct emu10k1_card *card)
  376. {
  377. struct patch_manager *mgr = &card->mgr;
  378. struct dsp_patch *patch;
  379. struct dsp_rpatch *rpatch;
  380. s32 left, right;
  381. int i;
  382. u32 pc = 0;
  383. u32 patch_n;
  384. for (i = 0; i < SOUND_MIXER_NRDEVICES; i++) {
  385. mgr->ctrl_gpr[i][0] = -1;
  386. mgr->ctrl_gpr[i][1] = -1;
  387. }
  388. for (i = 0; i < 512; i++)
  389. OP(6, 0x40, 0x40, 0x40, 0x40);
  390. for (i = 0; i < 256; i++)
  391. sblive_writeptr_tag(card, 0,
  392.     FXGPREGBASE + i, 0,
  393.     TANKMEMADDRREGBASE + i, 0,
  394.     TAGLIST_END);
  395. /* !! The number bellow must equal the number of patches, currently 11 !! */
  396. mgr->current_pages = (11 + PATCHES_PER_PAGE - 1) / PATCHES_PER_PAGE;
  397. for (i = 0; i < mgr->current_pages; i++) {
  398. mgr->patch[i] = (void *)__get_free_page(GFP_KERNEL);
  399. if (mgr->patch[i] == NULL) {
  400. mgr->current_pages = i;
  401. fx_cleanup(mgr);
  402. return -ENOMEM;
  403. }
  404. memset(mgr->patch[i], 0, PAGE_SIZE);
  405. }
  406. pc = 0;
  407. patch_n = 0;
  408. //first free GPR = 0x11b
  409. /* FX volume correction and Volume control*/
  410. INPUT_PATCH_START(patch, "Pcm L vol", 0x0, 0);
  411. GET_OUTPUT_GPR(patch, 0x100, 0x0);
  412. GET_CONTROL_GPR(patch, 0x106, "Vol", 0, 0x7fffffff);
  413. GET_DYNAMIC_GPR(patch, 0x112);
  414. OP(4, 0x112, 0x40, PCM_IN_L, 0x44); //*4
  415. OP(0, 0x100, 0x040, 0x112, 0x106);  //*vol
  416. INPUT_PATCH_END(patch);
  417. INPUT_PATCH_START(patch, "Pcm R vol", 0x1, 0);
  418. GET_OUTPUT_GPR(patch, 0x101, 0x1);
  419. GET_CONTROL_GPR(patch, 0x107, "Vol", 0, 0x7fffffff);
  420. GET_DYNAMIC_GPR(patch, 0x112);
  421. OP(4, 0x112, 0x40, PCM_IN_R, 0x44); 
  422. OP(0, 0x101, 0x040, 0x112, 0x107);
  423. INPUT_PATCH_END(patch);
  424. // CD-Digital In Volume control
  425. INPUT_PATCH_START(patch, "CD-Digital Vol L", 0x12, 0);
  426. GET_OUTPUT_GPR(patch, 0x10c, 0x12);
  427. GET_CONTROL_GPR(patch, 0x10d, "Vol", 0, 0x7fffffff);
  428. OP(0, 0x10c, 0x040, SPDIF_CD_L, 0x10d);
  429. INPUT_PATCH_END(patch);
  430. INPUT_PATCH_START(patch, "CD-Digital Vol R", 0x13, 0);
  431. GET_OUTPUT_GPR(patch, 0x10e, 0x13);
  432. GET_CONTROL_GPR(patch, 0x10f, "Vol", 0, 0x7fffffff);
  433. OP(0, 0x10e, 0x040, SPDIF_CD_R, 0x10f);
  434. INPUT_PATCH_END(patch);
  435. //Volume Correction for Multi-channel Inputs
  436. INPUT_PATCH_START(patch, "Multi-Channel Gain", 0x08, 0);
  437. patch->input=patch->output=0x3F00;
  438. GET_OUTPUT_GPR(patch, 0x113, MULTI_FRONT_L);
  439. GET_OUTPUT_GPR(patch, 0x114, MULTI_FRONT_R);
  440. GET_OUTPUT_GPR(patch, 0x115, MULTI_REAR_L);
  441. GET_OUTPUT_GPR(patch, 0x116, MULTI_REAR_R);
  442. GET_OUTPUT_GPR(patch, 0x117, MULTI_CENTER);
  443. GET_OUTPUT_GPR(patch, 0x118, MULTI_LFE);
  444. OP(4, 0x113, 0x40, MULTI_FRONT_L, 0x44);
  445. OP(4, 0x114, 0x40, MULTI_FRONT_R, 0x44);
  446. OP(4, 0x115, 0x40, MULTI_REAR_L, 0x44);
  447. OP(4, 0x116, 0x40, MULTI_REAR_R, 0x44);
  448. OP(4, 0x117, 0x40, MULTI_CENTER, 0x44);
  449. OP(4, 0x118, 0x40, MULTI_LFE, 0x44);
  450. INPUT_PATCH_END(patch);
  451. //Routing patch start
  452. ROUTING_PATCH_START(rpatch, "Routing");
  453. GET_INPUT_GPR(rpatch, 0x100, 0x0);
  454. GET_INPUT_GPR(rpatch, 0x101, 0x1);
  455. GET_INPUT_GPR(rpatch, 0x10c, 0x12);
  456. GET_INPUT_GPR(rpatch, 0x10e, 0x13);
  457. GET_INPUT_GPR(rpatch, 0x113, MULTI_FRONT_L);
  458. GET_INPUT_GPR(rpatch, 0x114, MULTI_FRONT_R);
  459. GET_INPUT_GPR(rpatch, 0x115, MULTI_REAR_L);
  460. GET_INPUT_GPR(rpatch, 0x116, MULTI_REAR_R);
  461. GET_INPUT_GPR(rpatch, 0x117, MULTI_CENTER);
  462. GET_INPUT_GPR(rpatch, 0x118, MULTI_LFE);
  463. GET_DYNAMIC_GPR(rpatch, 0x102);
  464. GET_DYNAMIC_GPR(rpatch, 0x103);
  465. GET_OUTPUT_GPR(rpatch, 0x104, 0x8);
  466. GET_OUTPUT_GPR(rpatch, 0x105, 0x9);
  467. GET_OUTPUT_GPR(rpatch, 0x10a, 0x2);
  468. GET_OUTPUT_GPR(rpatch, 0x10b, 0x3);
  469. /* input buffer */
  470. OP(6, 0x102, AC97_IN_L, 0x40, 0x40);
  471. OP(6, 0x103, AC97_IN_R, 0x40, 0x40);
  472. /* Digital In + PCM + MULTI_FRONT-> AC97 out (front speakers)*/
  473. OP(6, AC97_FRONT_L, 0x100, 0x10c, 0x113);
  474. CONNECT(MULTI_FRONT_L, AC97_FRONT_L);
  475. CONNECT(PCM_IN_L, AC97_FRONT_L);
  476. CONNECT(SPDIF_CD_L, AC97_FRONT_L);
  477. OP(6, AC97_FRONT_R, 0x101, 0x10e, 0x114);
  478. CONNECT(MULTI_FRONT_R, AC97_FRONT_R);
  479. CONNECT(PCM_IN_R, AC97_FRONT_R);
  480. CONNECT(SPDIF_CD_R, AC97_FRONT_R);
  481. /* Digital In + PCM + AC97 In + PCM1 + MULTI_REAR --> Rear Channel */ 
  482. OP(6, 0x104, PCM1_IN_L, 0x100, 0x115);
  483. OP(6, 0x104, 0x104, 0x10c, 0x102);
  484. CONNECT(MULTI_REAR_L, ANALOG_REAR_L);
  485. CONNECT(AC97_IN_L, ANALOG_REAR_L);
  486. CONNECT(PCM_IN_L, ANALOG_REAR_L);
  487. CONNECT(SPDIF_CD_L, ANALOG_REAR_L);
  488. CONNECT(PCM1_IN_L, ANALOG_REAR_L);
  489. OP(6, 0x105, PCM1_IN_R, 0x101, 0x116);
  490. OP(6, 0x105, 0x105, 0x10e, 0x103);
  491. CONNECT(MULTI_REAR_R, ANALOG_REAR_R);
  492. CONNECT(AC97_IN_R, ANALOG_REAR_R);
  493. CONNECT(PCM_IN_R, ANALOG_REAR_R);
  494. CONNECT(SPDIF_CD_R, ANALOG_REAR_R);
  495. CONNECT(PCM1_IN_R, ANALOG_REAR_R);
  496. /* Digital In + PCM + AC97 In + MULTI_FRONT --> Digital out */
  497. OP(6, 0x10a, 0x100, 0x102, 0x10c);
  498. OP(6, 0x10a, 0x10a, 0x113, 0x40);
  499. CONNECT(MULTI_FRONT_L, DIGITAL_OUT_L);
  500. CONNECT(PCM_IN_L, DIGITAL_OUT_L);
  501. CONNECT(AC97_IN_L, DIGITAL_OUT_L);
  502. CONNECT(SPDIF_CD_L, DIGITAL_OUT_L);
  503. OP(6, 0x10b, 0x101, 0x103, 0x10e);
  504. OP(6, 0x10b, 0x10b, 0x114, 0x40);
  505. CONNECT(MULTI_FRONT_R, DIGITAL_OUT_R);
  506. CONNECT(PCM_IN_R, DIGITAL_OUT_R);
  507. CONNECT(AC97_IN_R, DIGITAL_OUT_R);
  508. CONNECT(SPDIF_CD_R, DIGITAL_OUT_R);
  509. /* AC97 In --> ADC Recording Buffer */
  510. OP(6, ADC_REC_L, 0x102, 0x40, 0x40);
  511. CONNECT(AC97_IN_L, ADC_REC_L);
  512. OP(6, ADC_REC_R, 0x103, 0x40, 0x40);
  513. CONNECT(AC97_IN_R, ADC_REC_R);
  514. /* fx12:Analog-Center */
  515. OP(6, ANALOG_CENTER, 0x117, 0x40, 0x40);
  516. CONNECT(MULTI_CENTER, ANALOG_CENTER);
  517. /* fx11:Analog-LFE */
  518. OP(6, ANALOG_LFE, 0x118, 0x40, 0x40);
  519. CONNECT(MULTI_LFE, ANALOG_LFE);
  520. /* fx12:Digital-Center */
  521. OP(6, DIGITAL_CENTER, 0x117, 0x40, 0x40);
  522. CONNECT(MULTI_CENTER, DIGITAL_CENTER);
  523. /* fx11:Analog-LFE */
  524. OP(6, DIGITAL_LFE, 0x118, 0x40, 0x40);
  525. CONNECT(MULTI_LFE, DIGITAL_LFE);
  526. ROUTING_PATCH_END(rpatch);
  527. // Rear volume control
  528. OUTPUT_PATCH_START(patch, "Vol Rear L", 0x8, 0);
  529. GET_INPUT_GPR(patch, 0x104, 0x8);
  530. GET_CONTROL_GPR(patch, 0x119, "Vol", 0, 0x7fffffff);
  531. OP(0, ANALOG_REAR_L, 0x040, 0x104, 0x119);
  532. OUTPUT_PATCH_END(patch);
  533. OUTPUT_PATCH_START(patch, "Vol Rear R", 0x9, 0);
  534. GET_INPUT_GPR(patch, 0x105, 0x9);
  535. GET_CONTROL_GPR(patch, 0x11a, "Vol", 0, 0x7fffffff);
  536. OP(0, ANALOG_REAR_R, 0x040, 0x105, 0x11a);
  537. OUTPUT_PATCH_END(patch);
  538. //Master volume control on front-digital
  539. OUTPUT_PATCH_START(patch, "Vol Master L", 0x2, 1);
  540. GET_INPUT_GPR(patch, 0x10a, 0x2);
  541. GET_CONTROL_GPR(patch, 0x108, "Vol", 0, 0x7fffffff);
  542. OP(0, DIGITAL_OUT_L, 0x040, 0x10a, 0x108);
  543. OUTPUT_PATCH_END(patch);
  544. OUTPUT_PATCH_START(patch, "Vol Master R", 0x3, 1);
  545. GET_INPUT_GPR(patch, 0x10b, 0x3);
  546. GET_CONTROL_GPR(patch, 0x109, "Vol", 0, 0x7fffffff);
  547. OP(0, DIGITAL_OUT_R, 0x040, 0x10b, 0x109);
  548. OUTPUT_PATCH_END(patch);
  549. /* delimiter patch */
  550. patch = PATCH(mgr, patch_n);
  551. patch->code_size = 0;
  552. sblive_writeptr(card, DBG, 0, 0);
  553. mgr->lock = SPIN_LOCK_UNLOCKED;
  554. //Master volume
  555. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][0] = 8;
  556. mgr->ctrl_gpr[SOUND_MIXER_VOLUME][1] = 9;
  557. left = card->ac97.mixer_state[SOUND_MIXER_VOLUME] & 0xff;
  558. right = (card->ac97.mixer_state[SOUND_MIXER_VOLUME] >> 8) & 0xff;
  559. emu10k1_set_volume_gpr(card, 8, left, 1 << card->ac97.bit_resolution);
  560. emu10k1_set_volume_gpr(card, 9, right, 1 << card->ac97.bit_resolution);
  561. //Rear volume
  562. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][0] = 0x19;
  563. mgr->ctrl_gpr[ SOUND_MIXER_OGAIN ][1] = 0x1a;
  564. left = right = 67;
  565. card->ac97.mixer_state[SOUND_MIXER_OGAIN] = (right << 8) | left;
  566. card->ac97.supported_mixers |= SOUND_MASK_OGAIN;
  567. card->ac97.stereo_mixers |= SOUND_MASK_OGAIN;
  568. emu10k1_set_volume_gpr(card, 0x19, left, VOL_5BIT);
  569. emu10k1_set_volume_gpr(card, 0x1a, right, VOL_5BIT);
  570. //PCM Volume
  571. mgr->ctrl_gpr[SOUND_MIXER_PCM][0] = 6;
  572. mgr->ctrl_gpr[SOUND_MIXER_PCM][1] = 7;
  573. left = card->ac97.mixer_state[SOUND_MIXER_PCM] & 0xff;
  574. right = (card->ac97.mixer_state[SOUND_MIXER_PCM] >> 8) & 0xff;
  575. emu10k1_set_volume_gpr(card, 6, left, VOL_5BIT);
  576. emu10k1_set_volume_gpr(card, 7, right, VOL_5BIT);
  577. //CD-Digital Volume
  578. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][0] = 0xd;
  579. mgr->ctrl_gpr[SOUND_MIXER_DIGITAL1][1] = 0xf;
  580. left = right = 67;
  581. card->ac97.mixer_state[SOUND_MIXER_DIGITAL1] = (right << 8) | left; 
  582. card->ac97.supported_mixers |= SOUND_MASK_DIGITAL1;
  583. card->ac97.stereo_mixers |= SOUND_MASK_DIGITAL1;
  584. emu10k1_set_volume_gpr(card, 0xd, left, VOL_5BIT);
  585. emu10k1_set_volume_gpr(card, 0xf, right, VOL_5BIT);
  586. //hard wire the ac97's pcm, we'll do that in dsp code instead.
  587. emu10k1_ac97_write(&card->ac97, 0x18, 0x0);
  588. card->ac97_supported_mixers &= ~SOUND_MASK_PCM;
  589. card->ac97_stereo_mixers &= ~SOUND_MASK_PCM;
  590. //set Igain to 0dB by default, maybe consider hardwiring it here.
  591. emu10k1_ac97_write(&card->ac97, AC97_RECORD_GAIN, 0x0000);
  592. card->ac97.mixer_state[SOUND_MIXER_IGAIN] = 0x101; 
  593. return 0;
  594. }
  595. static int __devinit hw_init(struct emu10k1_card *card)
  596. {
  597. int nCh;
  598. u32 pagecount; /* tmp */
  599. int ret;
  600. /* Disable audio and lock cache */
  601. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  602. /* Reset recording buffers */
  603. sblive_writeptr_tag(card, 0,
  604.     MICBS, ADCBS_BUFSIZE_NONE,
  605.     MICBA, 0,
  606.     FXBS, ADCBS_BUFSIZE_NONE,
  607.     FXBA, 0,
  608.     ADCBS, ADCBS_BUFSIZE_NONE,
  609.     ADCBA, 0,
  610.     TAGLIST_END);
  611. /* Disable channel interrupt */
  612. emu10k1_writefn0(card, INTE, 0);
  613. sblive_writeptr_tag(card, 0,
  614.     CLIEL, 0,
  615.     CLIEH, 0,
  616.     SOLEL, 0,
  617.     SOLEH, 0,
  618.     TAGLIST_END);
  619. /* Init envelope engine */
  620. for (nCh = 0; nCh < NUM_G; nCh++) {
  621. sblive_writeptr_tag(card, nCh,
  622.     DCYSUSV, 0,
  623.     IP, 0,
  624.     VTFT, 0xffff,
  625.     CVCF, 0xffff,
  626.     PTRX, 0,
  627.     //CPF, 0,
  628.     CCR, 0,
  629.     PSST, 0,
  630.     DSL, 0x10,
  631.     CCCA, 0,
  632.     Z1, 0,
  633.     Z2, 0,
  634.     FXRT, 0xd01c0000,
  635.     ATKHLDM, 0,
  636.     DCYSUSM, 0,
  637.     IFATN, 0xffff,
  638.     PEFE, 0,
  639.     FMMOD, 0,
  640.     TREMFRQ, 24, /* 1 Hz */
  641.     FM2FRQ2, 24, /* 1 Hz */
  642.     TEMPENV, 0,
  643.     /*** These are last so OFF prevents writing ***/
  644.     LFOVAL2, 0,
  645.     LFOVAL1, 0,
  646.     ATKHLDV, 0,
  647.     ENVVOL, 0,
  648.     ENVVAL, 0,
  649.                                     TAGLIST_END);
  650. sblive_writeptr(card, CPF, nCh, 0);
  651. }
  652. /*
  653.  ** Init to 0x02109204 :
  654.  ** Clock accuracy    = 0     (1000ppm)
  655.  ** Sample Rate       = 2     (48kHz)
  656.  ** Audio Channel     = 1     (Left of 2)
  657.  ** Source Number     = 0     (Unspecified)
  658.  ** Generation Status = 1     (Original for Cat Code 12)
  659.  ** Cat Code          = 12    (Digital Signal Mixer)
  660.  ** Mode              = 0     (Mode 0)
  661.  ** Emphasis          = 0     (None)
  662.  ** CP                = 1     (Copyright unasserted)
  663.  ** AN                = 0     (Digital audio)
  664.  ** P                 = 0     (Consumer)
  665.  */
  666. sblive_writeptr_tag(card, 0,
  667.     /* SPDIF0 */
  668.     SPCS0, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  669.     SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  670.     /* SPDIF1 */
  671.     SPCS1, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  672.     SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  673.     /* SPDIF2 & SPDIF3 */
  674.     SPCS2, (SPCS_CLKACCY_1000PPM | 0x002000000 |
  675.     SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | SPCS_GENERATIONSTATUS | 0x00001200 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT),
  676.     TAGLIST_END);
  677. ret = fx_init(card); /* initialize effects engine */
  678. if (ret < 0)
  679. return ret;
  680. card->tankmem.size = 0;
  681. card->virtualpagetable.size = MAXPAGES * sizeof(u32);
  682. card->virtualpagetable.addr = pci_alloc_consistent(card->pci_dev, card->virtualpagetable.size, &card->virtualpagetable.dma_handle);
  683. if (card->virtualpagetable.addr == NULL) {
  684. ERROR();
  685. ret = -ENOMEM;
  686. goto err0;
  687. }
  688. card->silentpage.size = EMUPAGESIZE;
  689. card->silentpage.addr = pci_alloc_consistent(card->pci_dev, card->silentpage.size, &card->silentpage.dma_handle);
  690. if (card->silentpage.addr == NULL) {
  691. ERROR();
  692. ret = -ENOMEM;
  693. goto err1;
  694. }
  695. for (pagecount = 0; pagecount < MAXPAGES; pagecount++)
  696. ((u32 *) card->virtualpagetable.addr)[pagecount] = cpu_to_le32(((u32) card->silentpage.dma_handle * 2) | pagecount);
  697. /* Init page table & tank memory base register */
  698. sblive_writeptr_tag(card, 0,
  699.     PTB, (u32) card->virtualpagetable.dma_handle,
  700.     TCB, 0,
  701.     TCBS, 0,
  702.     TAGLIST_END);
  703. for (nCh = 0; nCh < NUM_G; nCh++) {
  704. sblive_writeptr_tag(card, nCh,
  705.     MAPA, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  706.     MAPB, MAP_PTI_MASK | ((u32) card->silentpage.dma_handle * 2),
  707.     TAGLIST_END);
  708. }
  709. /* Hokay, now enable the AUD bit */
  710. /* Enable Audio = 1 */
  711. /* Mute Disable Audio = 0 */
  712. /* Lock Tank Memory = 1 */
  713. /* Lock Sound Memory = 0 */
  714. /* Auto Mute = 1 */
  715. if (card->model == 0x20 || card->model == 0xc400 ||
  716.   (card->model == 0x21 && card->chiprev < 6))
  717.         emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE);
  718. else
  719. emu10k1_writefn0(card, HCFG, HCFG_AUDIOENABLE  | HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE);
  720. /* Enable Vol_Ctrl irqs */
  721. emu10k1_irq_enable(card, INTE_VOLINCRENABLE | INTE_VOLDECRENABLE | INTE_MUTEENABLE | INTE_FXDSPENABLE);
  722. /* FIXME: TOSLink detection */
  723. card->has_toslink = 0;
  724. /* Initialize digital passthrough variables */
  725. card->pt.pos_gpr = card->pt.intr_gpr = card->pt.enable_gpr = -1;
  726. card->pt.selected = 0;
  727. card->pt.state = PT_STATE_INACTIVE;
  728. card->pt.spcs_to_use = 0x01;
  729. card->pt.patch_name = "AC3pass";
  730. card->pt.intr_gpr_name = "count";
  731. card->pt.enable_gpr_name = "enable";
  732. card->pt.pos_gpr_name = "ptr";
  733. spin_lock_init(&card->pt.lock);
  734. init_waitqueue_head(&card->pt.wait);
  735. /* tmp = sblive_readfn0(card, HCFG);
  736. if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
  737. sblive_writefn0(card, HCFG, tmp | 0x800);
  738. udelay(512);
  739. if (tmp != (sblive_readfn0(card, HCFG) & ~0x800)) {
  740. card->has_toslink = 1;
  741. sblive_writefn0(card, HCFG, tmp);
  742. }
  743. }
  744. */
  745. return 0;
  746.   err1:
  747. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  748.   err0:
  749. fx_cleanup(&card->mgr);
  750. return ret;
  751. }
  752. static int __devinit emu10k1_init(struct emu10k1_card *card)
  753. {
  754. /* Init Card */
  755. if (hw_init(card) < 0)
  756. return -1;
  757. voice_init(card);
  758. timer_init(card);
  759. addxmgr_init(card);
  760. DPD(2, "  hw control register -> %#xn", emu10k1_readfn0(card, HCFG));
  761. return 0;
  762. }
  763. static void __devinit emu10k1_cleanup(struct emu10k1_card *card)
  764. {
  765. int ch;
  766. emu10k1_writefn0(card, INTE, 0);
  767. /** Shutdown the chip **/
  768. for (ch = 0; ch < NUM_G; ch++)
  769. sblive_writeptr(card, DCYSUSV, ch, 0);
  770. for (ch = 0; ch < NUM_G; ch++) {
  771. sblive_writeptr_tag(card, ch,
  772.     VTFT, 0,
  773.     CVCF, 0,
  774.     PTRX, 0,
  775.     //CPF, 0,
  776.     TAGLIST_END);
  777. sblive_writeptr(card, CPF, ch, 0);
  778. }
  779. /* Disable audio and lock cache */
  780. emu10k1_writefn0(card, HCFG, HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE);
  781. sblive_writeptr_tag(card, 0,
  782.                             PTB, 0,
  783.     /* Reset recording buffers */
  784.     MICBS, ADCBS_BUFSIZE_NONE,
  785.     MICBA, 0,
  786.     FXBS, ADCBS_BUFSIZE_NONE,
  787.     FXBA, 0,
  788.     FXWC, 0,
  789.     ADCBS, ADCBS_BUFSIZE_NONE,
  790.     ADCBA, 0,
  791.     TCBS, 0,
  792.     TCB, 0,
  793.     DBG, 0x8000,
  794.     /* Disable channel interrupt */
  795.     CLIEL, 0,
  796.     CLIEH, 0,
  797.     SOLEL, 0,
  798.     SOLEH, 0,
  799.     TAGLIST_END);
  800. pci_free_consistent(card->pci_dev, card->virtualpagetable.size, card->virtualpagetable.addr, card->virtualpagetable.dma_handle);
  801. pci_free_consistent(card->pci_dev, card->silentpage.size, card->silentpage.addr, card->silentpage.dma_handle);
  802. if(card->tankmem.size != 0)
  803. pci_free_consistent(card->pci_dev, card->tankmem.size, card->tankmem.addr, card->tankmem.dma_handle);
  804. /* release patch storage memory */
  805. fx_cleanup(&card->mgr);
  806. }
  807. /* Driver initialization routine */
  808. static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_id)
  809. {
  810. struct emu10k1_card *card;
  811. u32 subsysvid;
  812. int ret;
  813. if (pci_set_dma_mask(pci_dev, EMU10K1_DMA_MASK)) {
  814. printk(KERN_ERR "emu10k1: architecture does not support 29bit PCI busmaster DMAn");
  815. return -ENODEV;
  816. }
  817. if (pci_enable_device(pci_dev))
  818. return -EIO;
  819. pci_set_master(pci_dev);
  820. if ((card = kmalloc(sizeof(struct emu10k1_card), GFP_KERNEL)) == NULL) {
  821.                 printk(KERN_ERR "emu10k1: out of memoryn");
  822.                 return -ENOMEM;
  823.         }
  824.         memset(card, 0, sizeof(struct emu10k1_card));
  825. card->iobase = pci_resource_start(pci_dev, 0);
  826. card->length = pci_resource_len(pci_dev, 0); 
  827. if (request_region(card->iobase, card->length, card_names[pci_id->driver_data]) == NULL) {
  828. printk(KERN_ERR "emu10k1: IO space in usen");
  829. ret = -EBUSY;
  830. goto err_region;
  831. }
  832. pci_set_drvdata(pci_dev, card);
  833. card->irq = pci_dev->irq;
  834. card->pci_dev = pci_dev;
  835. /* Reserve IRQ Line */
  836. if (request_irq(card->irq, emu10k1_interrupt, SA_SHIRQ, card_names[pci_id->driver_data], card)) {
  837. printk(KERN_ERR "emu10k1: IRQ in usen");
  838. ret = -EBUSY;
  839. goto err_irq;
  840. }
  841. pci_read_config_byte(pci_dev, PCI_REVISION_ID, &card->chiprev);
  842. pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &card->model);
  843. printk(KERN_INFO "emu10k1: %s rev %d model %#04x found, IO at %#04lx-%#04lx, IRQ %dn",
  844. card_names[pci_id->driver_data], card->chiprev, card->model, card->iobase,
  845. card->iobase + card->length - 1, card->irq);
  846. pci_read_config_dword(pci_dev, PCI_SUBSYSTEM_VENDOR_ID, &subsysvid);
  847. card->is_aps = (subsysvid == EMU_APS_SUBID);
  848. spin_lock_init(&card->lock);
  849. init_MUTEX(&card->open_sem);
  850. card->open_mode = 0;
  851. init_waitqueue_head(&card->open_wait);
  852. ret = emu10k1_audio_init(card);
  853. if(ret < 0) {
  854.                 printk(KERN_ERR "emu10k1: cannot initialize audio devicesn");
  855.                 goto err_audio;
  856.         }
  857. ret = emu10k1_mixer_init(card);
  858. if(ret < 0) {
  859. printk(KERN_ERR "emu10k1: cannot initialize AC97 codecn");
  860.                 goto err_mixer;
  861. }
  862. ret = emu10k1_midi_init(card);
  863. if (ret < 0) {
  864. printk(KERN_ERR "emu10k1: cannot register midi devicen");
  865. goto err_midi;
  866. }
  867. ret = emu10k1_init(card);
  868. if (ret < 0) {
  869. printk(KERN_ERR "emu10k1: cannot initialize devicen");
  870. goto err_emu10k1_init;
  871. }
  872. if (card->is_aps)
  873. emu10k1_ecard_init(card);
  874. list_add(&card->list, &emu10k1_devs);
  875. return 0;
  876. err_emu10k1_init:
  877. emu10k1_midi_cleanup(card);
  878. err_midi:
  879. emu10k1_mixer_cleanup(card);
  880. err_mixer:
  881. emu10k1_audio_cleanup(card);
  882. err_audio:
  883. free_irq(card->irq, card);
  884. err_irq:
  885. release_region(card->iobase, card->length);
  886. pci_set_drvdata(pci_dev, NULL);
  887. err_region:
  888. kfree(card);
  889. return ret;
  890. }
  891. static void __devexit emu10k1_remove(struct pci_dev *pci_dev)
  892. {
  893. struct emu10k1_card *card = pci_get_drvdata(pci_dev);
  894. list_del(&card->list);
  895. emu10k1_cleanup(card);
  896. emu10k1_midi_cleanup(card);
  897. emu10k1_mixer_cleanup(card);
  898. emu10k1_audio_cleanup(card);
  899. free_irq(card->irq, card);
  900. release_region(card->iobase, card->length);
  901. kfree(card);
  902. pci_set_drvdata(pci_dev, NULL);
  903. }
  904. MODULE_AUTHOR("Bertrand Lee, Cai Ying. (Email to: emu10k1-devel@lists.sourceforge.net)");
  905. MODULE_DESCRIPTION("Creative EMU10K1 PCI Audio Driver v" DRIVER_VERSION "nCopyright (C) 1999 Creative Technology Ltd.");
  906. MODULE_LICENSE("GPL");
  907. static struct pci_driver emu10k1_pci_driver = {
  908. name: "emu10k1",
  909. id_table: emu10k1_pci_tbl,
  910. probe: emu10k1_probe,
  911. remove: __devexit_p(emu10k1_remove),
  912. };
  913. static int __init emu10k1_init_module(void)
  914. {
  915. printk(KERN_INFO "Creative EMU10K1 PCI Audio Driver, version " DRIVER_VERSION ", " __TIME__ " " __DATE__ "n");
  916. return pci_module_init(&emu10k1_pci_driver);
  917. }
  918. static void __exit emu10k1_cleanup_module(void)
  919. {
  920. pci_unregister_driver(&emu10k1_pci_driver);
  921. return;
  922. }
  923. module_init(emu10k1_init_module);
  924. module_exit(emu10k1_cleanup_module);
  925. #ifdef EMU10K1_SEQUENCER
  926. /* in midi.c */
  927. extern int emu10k1_seq_midi_open(int dev, int mode, 
  928. void (*input)(int dev, unsigned char midi_byte),
  929. void (*output)(int dev));
  930. extern void emu10k1_seq_midi_close(int dev);
  931. extern int emu10k1_seq_midi_out(int dev, unsigned char midi_byte);
  932. extern int emu10k1_seq_midi_start_read(int dev);
  933. extern int emu10k1_seq_midi_end_read(int dev);
  934. extern void emu10k1_seq_midi_kick(int dev);
  935. extern int emu10k1_seq_midi_buffer_status(int dev);
  936. static struct midi_operations emu10k1_midi_operations =
  937. {
  938. THIS_MODULE,
  939. {"EMU10K1 MIDI", 0, 0, SNDCARD_EMU10K1},
  940. &std_midi_synth,
  941. {0},
  942. emu10k1_seq_midi_open,
  943. emu10k1_seq_midi_close,
  944. NULL,
  945. emu10k1_seq_midi_out,
  946. emu10k1_seq_midi_start_read,
  947. emu10k1_seq_midi_end_read,
  948. emu10k1_seq_midi_kick,
  949. NULL,
  950. emu10k1_seq_midi_buffer_status,
  951. NULL
  952. };
  953. #endif