Lines Matching refs:emu
39 #define HANA_FILENAME "emu/hana.fw"
40 #define DOCK_FILENAME "emu/audio_dock.fw"
41 #define EMU1010B_FILENAME "emu/emu1010b.fw"
42 #define MICRO_DOCK_FILENAME "emu/micro_dock.fw"
43 #define EMU0404_FILENAME "emu/emu0404.fw"
44 #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw"
58 void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
60 snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
61 snd_emu10k1_ptr_write(emu, IP, ch, 0);
62 snd_emu10k1_ptr_write(emu, VTFT, ch, 0xffff);
63 snd_emu10k1_ptr_write(emu, CVCF, ch, 0xffff);
64 snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
65 snd_emu10k1_ptr_write(emu, CPF, ch, 0);
66 snd_emu10k1_ptr_write(emu, CCR, ch, 0);
68 snd_emu10k1_ptr_write(emu, PSST, ch, 0);
69 snd_emu10k1_ptr_write(emu, DSL, ch, 0x10);
70 snd_emu10k1_ptr_write(emu, CCCA, ch, 0);
71 snd_emu10k1_ptr_write(emu, Z1, ch, 0);
72 snd_emu10k1_ptr_write(emu, Z2, ch, 0);
73 snd_emu10k1_ptr_write(emu, FXRT, ch, 0x32100000);
75 snd_emu10k1_ptr_write(emu, ATKHLDM, ch, 0);
76 snd_emu10k1_ptr_write(emu, DCYSUSM, ch, 0);
77 snd_emu10k1_ptr_write(emu, IFATN, ch, 0xffff);
78 snd_emu10k1_ptr_write(emu, PEFE, ch, 0);
79 snd_emu10k1_ptr_write(emu, FMMOD, ch, 0);
80 snd_emu10k1_ptr_write(emu, TREMFRQ, ch, 24); /* 1 Hz */
81 snd_emu10k1_ptr_write(emu, FM2FRQ2, ch, 24); /* 1 Hz */
82 snd_emu10k1_ptr_write(emu, TEMPENV, ch, 0);
85 snd_emu10k1_ptr_write(emu, LFOVAL2, ch, 0);
86 snd_emu10k1_ptr_write(emu, LFOVAL1, ch, 0);
87 snd_emu10k1_ptr_write(emu, ATKHLDV, ch, 0);
88 snd_emu10k1_ptr_write(emu, ENVVOL, ch, 0);
89 snd_emu10k1_ptr_write(emu, ENVVAL, ch, 0);
92 if (emu->audigy) {
93 snd_emu10k1_ptr_write(emu, 0x4c, ch, 0); /* ?? */
94 snd_emu10k1_ptr_write(emu, 0x4d, ch, 0); /* ?? */
95 snd_emu10k1_ptr_write(emu, 0x4e, ch, 0); /* ?? */
96 snd_emu10k1_ptr_write(emu, 0x4f, ch, 0); /* ?? */
97 snd_emu10k1_ptr_write(emu, A_FXRT1, ch, 0x03020100);
98 snd_emu10k1_ptr_write(emu, A_FXRT2, ch, 0x3f3f3f3f);
99 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, ch, 0);
143 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume)
151 HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
154 snd_emu10k1_ptr_write(emu, MICBS, 0, ADCBS_BUFSIZE_NONE);
155 snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
156 snd_emu10k1_ptr_write(emu, FXBS, 0, ADCBS_BUFSIZE_NONE);
157 snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
158 snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
159 snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
162 outl(0, emu->port + INTE);
163 snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
164 snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
165 snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
166 snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
168 if (emu->audigy) {
170 snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
172 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT |
178 snd_emu10k1_voice_init(emu, ch);
180 snd_emu10k1_ptr_write(emu, SPCS0, 0, emu->spdif_bits[0]);
181 snd_emu10k1_ptr_write(emu, SPCS1, 0, emu->spdif_bits[1]);
182 snd_emu10k1_ptr_write(emu, SPCS2, 0, emu->spdif_bits[2]);
184 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
187 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
190 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
193 snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
196 snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF);
199 outl(0x0201, emu->port + HCFG2);
201 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
203 if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
205 dev_info(emu->card->dev, "Audigy2 value: Special config.\n");
207 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
210 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
213 outl(0x600000, emu->port + 0x20);
214 outl(0x14, emu->port + 0x24);
217 outl(0x7b0000, emu->port + 0x20);
218 outl(0xFF000000, emu->port + 0x24);
224 outl(0x7a0000, emu->port + 0x20);
225 outl(0xFF000000, emu->port + 0x24);
226 tmp = inl(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
227 outl(tmp, emu->port + A_IOCFG);
229 if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */
234 snd_emu10k1_spi_write(emu, spi_dac_init[n]);
236 snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10);
247 outl(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */
249 if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */
252 snd_emu10k1_ptr20_write(emu, P17V_I2S_SRC_SEL, 0, 0x2020205f);
253 tmp = inl(emu->port + A_IOCFG);
254 outl(tmp | 0x4, emu->port + A_IOCFG); /* Set bit 2 for mic input */
255 tmp = inl(emu->port + A_IOCFG);
258 snd_emu10k1_i2c_write(emu, i2c_adc_init[n][0], i2c_adc_init[n][1]);
260 emu->i2c_capture_volume[n][0] = 0xcf;
261 emu->i2c_capture_volume[n][1] = 0xcf;
266 snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
267 snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */
268 snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
270 silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
272 snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
273 snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
276 if (emu->card_capabilities->emu_model) {
279 HCFG_AUDIOENABLE, emu->port + HCFG);
287 } else if (emu->audigy) {
288 if (emu->revision == 4) /* audigy2 */
292 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
294 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
295 /* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
297 } else if (emu->model == 0x20 ||
298 emu->model == 0xc400 ||
299 (emu->model == 0x21 && emu->revision < 6))
300 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG);
303 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
306 if (emu->card_capabilities->emu_model) {
308 } else if (emu->card_capabilities->i2c_adc) {
310 } else if (emu->audigy) {
311 unsigned int reg = inl(emu->port + A_IOCFG);
312 outl(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
314 outl(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
316 outl(reg, emu->port + A_IOCFG);
318 unsigned int reg = inl(emu->port + HCFG);
319 outl(reg | HCFG_GPOUT2, emu->port + HCFG);
321 outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG);
323 outl(reg, emu->port + HCFG);
327 if (emu->card_capabilities->emu_model) {
329 } else if (emu->card_capabilities->i2c_adc) {
331 } else if (emu->audigy) { /* enable analog output */
332 unsigned int reg = inl(emu->port + A_IOCFG);
333 outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
336 if (emu->address_mode == 0) {
338 outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG);
344 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu)
349 outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
352 if (emu->card_capabilities->emu_model) {
354 } else if (emu->card_capabilities->i2c_adc) {
356 } else if (emu->audigy) {
357 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
359 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
363 outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
364 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
366 outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
369 outl(inl(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG);
378 emu->tos_link = 0;
379 tmp = inl(emu->port + HCFG);
381 outl(tmp|0x800, emu->port + HCFG);
383 if (tmp != (inl(emu->port + HCFG) & ~0x800)) {
384 emu->tos_link = 1;
385 outl(tmp, emu->port + HCFG);
391 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE);
394 int snd_emu10k1_done(struct snd_emu10k1 *emu)
398 outl(0, emu->port + INTE);
404 snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
406 snd_emu10k1_ptr_write(emu, VTFT, ch, 0);
407 snd_emu10k1_ptr_write(emu, CVCF, ch, 0);
408 snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
409 snd_emu10k1_ptr_write(emu, CPF, ch, 0);
413 snd_emu10k1_ptr_write(emu, MICBS, 0, 0);
414 snd_emu10k1_ptr_write(emu, MICBA, 0, 0);
415 snd_emu10k1_ptr_write(emu, FXBS, 0, 0);
416 snd_emu10k1_ptr_write(emu, FXBA, 0, 0);
417 snd_emu10k1_ptr_write(emu, FXWC, 0, 0);
418 snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE);
419 snd_emu10k1_ptr_write(emu, ADCBA, 0, 0);
420 snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
421 snd_emu10k1_ptr_write(emu, TCB, 0, 0);
422 if (emu->audigy)
423 snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
425 snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
428 snd_emu10k1_ptr_write(emu, CLIEL, 0, 0);
429 snd_emu10k1_ptr_write(emu, CLIEH, 0, 0);
430 snd_emu10k1_ptr_write(emu, SOLEL, 0, 0);
431 snd_emu10k1_ptr_write(emu, SOLEH, 0, 0);
434 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
435 snd_emu10k1_ptr_write(emu, PTB, 0, 0);
517 static void snd_emu10k1_ecard_write(struct snd_emu10k1 *emu, unsigned int value)
524 hc_port = emu->port + HCFG;
555 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 *emu,
561 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
564 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
569 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA);
575 snd_emu10k1_ecard_write(emu, value);
576 snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK);
577 snd_emu10k1_ecard_write(emu, value);
580 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
583 static int snd_emu10k1_ecard_init(struct snd_emu10k1 *emu)
588 emu->ecard_ctrl = EC_RAW_RUN_MODE |
594 hc_value = inl(emu->port + HCFG);
595 outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG);
596 inl(emu->port + HCFG);
599 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
602 snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN);
607 snd_emu10k1_wait(emu, 48000);
612 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
615 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
618 snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN);
623 static int snd_emu10k1_cardbus_init(struct snd_emu10k1 *emu)
631 special_port = emu->port + 0x38;
644 snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */
650 static int snd_emu1010_load_firmware_entry(struct snd_emu10k1 *emu,
668 spin_lock_irqsave(&emu->emu_lock, flags);
669 outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */
670 write_post = inl(emu->port + A_IOCFG);
672 outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */
673 write_post = inl(emu->port + A_IOCFG);
682 outl(reg, emu->port + A_IOCFG);
683 write_post = inl(emu->port + A_IOCFG);
684 outl(reg | 0x40, emu->port + A_IOCFG);
685 write_post = inl(emu->port + A_IOCFG);
689 outl(0x10, emu->port + A_IOCFG);
690 write_post = inl(emu->port + A_IOCFG);
691 spin_unlock_irqrestore(&emu->emu_lock, flags);
712 static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock,
719 filename = firmware_names[emu->card_capabilities->emu_model][dock];
722 err = request_firmware(fw, filename, &emu->pci->dev);
727 return snd_emu1010_load_firmware_entry(emu, *fw);
732 struct snd_emu10k1 *emu;
736 emu = container_of(work, struct snd_emu10k1,
738 if (emu->card->shutdown)
741 if (emu->suspend)
744 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp); /* IRQ Status */
745 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); /* OPTIONS: Which cards are attached to the EMU */
749 dev_info(emu->card->dev,
751 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG,
753 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw);
757 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0);
758 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp);
759 dev_info(emu->card->dev,
762 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp);
763 dev_info(emu->card->dev,
767 dev_info(emu->card->dev,
772 dev_info(emu->card->dev,
774 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp);
775 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2);
776 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2);
781 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
782 } else if (!reg && emu->emu1010.last_reg) {
784 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
786 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
790 emu->emu1010.last_reg = reg;
791 if (!emu->card->shutdown)
792 schedule_delayed_work(&emu->emu1010.firmware_work,
827 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
833 dev_info(emu->card->dev, "emu1010: Special config.\n");
838 outl(0x0005a00c, emu->port + HCFG);
843 outl(0x0005a004, emu->port + HCFG);
847 outl(0x0005a000, emu->port + HCFG);
851 outl(0x0005a000, emu->port + HCFG);
854 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0);
857 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
858 dev_dbg(emu->card->dev, "reg1 = 0x%x\n", reg);
863 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0x02);
865 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
866 dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg);
869 dev_info(emu->card->dev,
873 dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg);
875 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
877 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
882 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
885 dev_info(emu->card->dev,
891 dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n");
892 snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp);
893 snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2);
894 dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2);
896 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON);
898 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®);
899 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg);
900 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®);
901 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg);
902 snd_emu1010_fpga_read(emu, EMU_HANA_OPTICAL_TYPE, &tmp);
907 emu->emu1010.optical_in = 1; /* IN_ADAT */
908 emu->emu1010.optical_out = 1; /* IN_ADAT */
910 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) |
911 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0);
912 snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
913 snd_emu1010_fpga_read(emu, EMU_HANA_ADC_PADS, &tmp);
915 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, 0x00);
916 emu->emu1010.adc_pads = 0x00;
917 snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp);
919 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30);
920 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12);
921 snd_emu1010_fpga_read(emu, EMU_HANA_DAC_PADS, &tmp);
923 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, 0x0f);
924 emu->emu1010.dac_pads = 0x0f;
925 snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp);
926 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30);
927 snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp);
929 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10);
931 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19);
933 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c);
935 /* snd_emu1010_fpga_write(emu, 0x09, 0x0f ); */
937 snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x00);
939 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®);
940 dev_info(emu->card->dev, "emu1010: Card options3 = 0x%x\n", reg);
942 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x00);
944 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
945 /* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
947 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12);
951 snd_emu1010_fpga_link_dst_src_write(emu,
953 snd_emu1010_fpga_link_dst_src_write(emu,
955 snd_emu1010_fpga_link_dst_src_write(emu,
957 snd_emu1010_fpga_link_dst_src_write(emu,
962 snd_emu1010_fpga_link_dst_src_write(emu,
964 snd_emu1010_fpga_link_dst_src_write(emu,
966 snd_emu1010_fpga_link_dst_src_write(emu,
968 snd_emu1010_fpga_link_dst_src_write(emu,
970 snd_emu1010_fpga_link_dst_src_write(emu,
972 snd_emu1010_fpga_link_dst_src_write(emu,
974 snd_emu1010_fpga_link_dst_src_write(emu,
976 snd_emu1010_fpga_link_dst_src_write(emu,
981 snd_emu1010_fpga_link_dst_src_write(emu,
983 snd_emu1010_fpga_link_dst_src_write(emu,
985 snd_emu1010_fpga_link_dst_src_write(emu,
987 snd_emu1010_fpga_link_dst_src_write(emu,
989 snd_emu1010_fpga_link_dst_src_write(emu,
991 snd_emu1010_fpga_link_dst_src_write(emu,
993 snd_emu1010_fpga_link_dst_src_write(emu,
995 snd_emu1010_fpga_link_dst_src_write(emu,
1002 snd_emu1010_fpga_link_dst_src_write(emu,
1004 snd_emu1010_fpga_link_dst_src_write(emu,
1006 snd_emu1010_fpga_link_dst_src_write(emu,
1008 snd_emu1010_fpga_link_dst_src_write(emu,
1010 snd_emu1010_fpga_link_dst_src_write(emu,
1012 snd_emu1010_fpga_link_dst_src_write(emu,
1014 snd_emu1010_fpga_link_dst_src_write(emu,
1016 snd_emu1010_fpga_link_dst_src_write(emu,
1021 snd_emu1010_fpga_link_dst_src_write(emu,
1023 snd_emu1010_fpga_link_dst_src_write(emu,
1025 snd_emu1010_fpga_link_dst_src_write(emu,
1027 snd_emu1010_fpga_link_dst_src_write(emu,
1029 snd_emu1010_fpga_link_dst_src_write(emu,
1031 snd_emu1010_fpga_link_dst_src_write(emu,
1033 snd_emu1010_fpga_link_dst_src_write(emu,
1035 snd_emu1010_fpga_link_dst_src_write(emu,
1037 snd_emu1010_fpga_link_dst_src_write(emu,
1039 snd_emu1010_fpga_link_dst_src_write(emu,
1041 snd_emu1010_fpga_link_dst_src_write(emu,
1043 snd_emu1010_fpga_link_dst_src_write(emu,
1048 snd_emu1010_fpga_link_dst_src_write(emu, 0x0100 + i, EMU_SRC_SILENCE);
1052 snd_emu1010_fpga_link_dst_src_write(emu, 0x0200 + i, EMU_SRC_SILENCE);
1056 snd_emu1010_fpga_link_dst_src_write(emu, 0x0300 + i, EMU_SRC_SILENCE);
1060 snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + i, EMU_SRC_SILENCE);
1062 snd_emu1010_fpga_link_dst_src_write(emu,
1064 snd_emu1010_fpga_link_dst_src_write(emu,
1066 snd_emu1010_fpga_link_dst_src_write(emu,
1068 snd_emu1010_fpga_link_dst_src_write(emu,
1070 snd_emu1010_fpga_link_dst_src_write(emu,
1072 snd_emu1010_fpga_link_dst_src_write(emu,
1074 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x01); /* Unmute all */
1076 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp);
1082 outl(0x0000a000, emu->port + HCFG);
1087 outl(0x0000a001, emu->port + HCFG);
1091 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp);
1092 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19); /* MIDI Route */
1093 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c); /* Unknown */
1094 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19); /* MIDI Route */
1095 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c); /* Unknown */
1096 snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp);
1097 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10); /* SPDIF Format spdif (or 0x11 for aes/ebu) */
1100 snd_emu1010_fpga_link_dst_src_write(emu,
1102 snd_emu1010_fpga_link_dst_src_write(emu,
1104 snd_emu1010_fpga_link_dst_src_write(emu,
1106 snd_emu1010_fpga_link_dst_src_write(emu,
1110 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) {
1113 snd_emu1010_fpga_link_dst_src_write(emu,
1115 emu->emu1010.output_source[0] = 17;
1116 snd_emu1010_fpga_link_dst_src_write(emu,
1118 emu->emu1010.output_source[1] = 18;
1119 snd_emu1010_fpga_link_dst_src_write(emu,
1121 emu->emu1010.output_source[2] = 19;
1122 snd_emu1010_fpga_link_dst_src_write(emu,
1124 emu->emu1010.output_source[3] = 20;
1125 snd_emu1010_fpga_link_dst_src_write(emu,
1127 emu->emu1010.output_source[4] = 21;
1128 snd_emu1010_fpga_link_dst_src_write(emu,
1130 emu->emu1010.output_source[5] = 22;
1132 snd_emu1010_fpga_link_dst_src_write(emu,
1134 emu->emu1010.output_source[16] = 17;
1135 snd_emu1010_fpga_link_dst_src_write(emu,
1137 emu->emu1010.output_source[17] = 18;
1140 snd_emu1010_fpga_link_dst_src_write(emu,
1142 emu->emu1010.output_source[0] = 21;
1143 snd_emu1010_fpga_link_dst_src_write(emu,
1145 emu->emu1010.output_source[1] = 22;
1146 snd_emu1010_fpga_link_dst_src_write(emu,
1148 emu->emu1010.output_source[2] = 23;
1149 snd_emu1010_fpga_link_dst_src_write(emu,
1151 emu->emu1010.output_source[3] = 24;
1152 snd_emu1010_fpga_link_dst_src_write(emu,
1154 emu->emu1010.output_source[4] = 25;
1155 snd_emu1010_fpga_link_dst_src_write(emu,
1157 emu->emu1010.output_source[5] = 26;
1158 snd_emu1010_fpga_link_dst_src_write(emu,
1160 emu->emu1010.output_source[6] = 27;
1161 snd_emu1010_fpga_link_dst_src_write(emu,
1163 emu->emu1010.output_source[7] = 28;
1165 snd_emu1010_fpga_link_dst_src_write(emu,
1167 emu->emu1010.output_source[8] = 21;
1168 snd_emu1010_fpga_link_dst_src_write(emu,
1170 emu->emu1010.output_source[9] = 22;
1172 snd_emu1010_fpga_link_dst_src_write(emu,
1174 emu->emu1010.output_source[10] = 21;
1175 snd_emu1010_fpga_link_dst_src_write(emu,
1177 emu->emu1010.output_source[11] = 22;
1179 snd_emu1010_fpga_link_dst_src_write(emu,
1181 emu->emu1010.output_source[12] = 21;
1182 snd_emu1010_fpga_link_dst_src_write(emu,
1184 emu->emu1010.output_source[13] = 22;
1186 snd_emu1010_fpga_link_dst_src_write(emu,
1188 emu->emu1010.output_source[14] = 21;
1189 snd_emu1010_fpga_link_dst_src_write(emu,
1191 emu->emu1010.output_source[15] = 22;
1193 snd_emu1010_fpga_link_dst_src_write(emu,
1195 emu->emu1010.output_source[16] = 21;
1196 snd_emu1010_fpga_link_dst_src_write(emu,
1198 emu->emu1010.output_source[17] = 22;
1199 snd_emu1010_fpga_link_dst_src_write(emu,
1201 emu->emu1010.output_source[18] = 23;
1202 snd_emu1010_fpga_link_dst_src_write(emu,
1204 emu->emu1010.output_source[19] = 24;
1205 snd_emu1010_fpga_link_dst_src_write(emu,
1207 emu->emu1010.output_source[20] = 25;
1208 snd_emu1010_fpga_link_dst_src_write(emu,
1210 emu->emu1010.output_source[21] = 26;
1211 snd_emu1010_fpga_link_dst_src_write(emu,
1213 emu->emu1010.output_source[22] = 27;
1214 snd_emu1010_fpga_link_dst_src_write(emu,
1216 emu->emu1010.output_source[23] = 28;
1219 /* snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, 0x0); */ /* Output spdif */
1222 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x0); /* Mute all */
1223 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x0); /* Default fallback clock 48kHz */
1225 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
1226 /* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
1227 emu->emu1010.internal_clock = 1; /* 48000 */
1228 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12); /* Set LEDs on Audio Dock */
1229 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x1); /* Unmute all */
1230 /* snd_emu1010_fpga_write(emu, 0x7, 0x0); */ /* Mute all */
1231 /* snd_emu1010_fpga_write(emu, 0x7, 0x1); */ /* Unmute all */
1232 /* snd_emu1010_fpga_write(emu, 0xe, 0x12); */ /* Set LEDs on Audio Dock */
1241 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
1242 static void free_pm_buffer(struct snd_emu10k1 *emu);
1245 static int snd_emu10k1_free(struct snd_emu10k1 *emu)
1247 if (emu->port) { /* avoid access to already used hardware */
1248 snd_emu10k1_fx8010_tram_setup(emu, 0);
1249 snd_emu10k1_done(emu);
1250 snd_emu10k1_free_efx(emu);
1252 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) {
1254 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0);
1256 cancel_delayed_work_sync(&emu->emu1010.firmware_work);
1257 release_firmware(emu->firmware);
1258 release_firmware(emu->dock_fw);
1259 if (emu->irq >= 0)
1260 free_irq(emu->irq, emu);
1261 snd_util_memhdr_free(emu->memhdr);
1262 if (emu->silent_page.area)
1263 snd_dma_free_pages(&emu->silent_page);
1264 if (emu->ptb_pages.area)
1265 snd_dma_free_pages(&emu->ptb_pages);
1266 vfree(emu->page_ptr_table);
1267 vfree(emu->page_addr_table);
1269 free_pm_buffer(emu);
1271 if (emu->port)
1272 pci_release_regions(emu->pci);
1273 if (emu->card_capabilities->ca0151_chip) /* P16V */
1274 snd_p16v_free(emu);
1275 pci_disable_device(emu->pci);
1276 kfree(emu);
1282 struct snd_emu10k1 *emu = device->device_data;
1283 return snd_emu10k1_free(emu);
1761 static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu)
1765 emu->iommu_workaround = false;
1767 if (!iommu_present(emu->card->dev->bus))
1770 domain = iommu_get_domain_for_dev(emu->card->dev);
1774 dev_notice(emu->card->dev,
1776 emu->iommu_workaround = true;
1788 struct snd_emu10k1 *emu;
1806 emu = kzalloc(sizeof(*emu), GFP_KERNEL);
1807 if (emu == NULL) {
1811 emu->card = card;
1812 spin_lock_init(&emu->reg_lock);
1813 spin_lock_init(&emu->emu_lock);
1814 spin_lock_init(&emu->spi_lock);
1815 spin_lock_init(&emu->i2c_lock);
1816 spin_lock_init(&emu->voice_lock);
1817 spin_lock_init(&emu->synth_lock);
1818 spin_lock_init(&emu->memblk_lock);
1819 mutex_init(&emu->fx8010.lock);
1820 INIT_LIST_HEAD(&emu->mapped_link_head);
1821 INIT_LIST_HEAD(&emu->mapped_order_link_head);
1822 emu->pci = pci;
1823 emu->irq = -1;
1824 emu->synth = NULL;
1825 emu->get_synth_voice = NULL;
1826 INIT_DELAYED_WORK(&emu->emu1010.firmware_work, emu1010_firmware_work);
1828 emu->revision = pci->revision;
1829 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1830 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1833 pci->vendor, pci->device, emu->serial, emu->model);
1843 if (c->subsystem && (c->subsystem != emu->serial))
1845 if (c->revision && c->revision != emu->revision)
1853 kfree(emu);
1857 emu->card_capabilities = c;
1864 pci->vendor, pci->device, emu->serial, c->subsystem);
1869 emu->serial);
1874 is_audigy = emu->audigy = c->emu10k2_chip;
1876 snd_emu10k1_detect_iommu(emu);
1879 emu->address_mode = is_audigy ? 0 : 1;
1881 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
1882 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) {
1885 emu->dma_mask);
1886 kfree(emu);
1891 emu->gpr_base = A_FXGPREGBASE;
1893 emu->gpr_base = FXGPREGBASE;
1897 kfree(emu);
1901 emu->port = pci_resource_start(pci, 0);
1903 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1905 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 :
1907 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size,
1908 &emu->ptb_pages) < 0) {
1913 (unsigned long)emu->ptb_pages.addr,
1914 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes));
1916 emu->page_ptr_table = vmalloc(array_size(sizeof(void *),
1917 emu->max_cache_pages));
1918 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long),
1919 emu->max_cache_pages));
1920 if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) {
1925 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE,
1926 &emu->silent_page) < 0) {
1931 (unsigned long)emu->silent_page.addr,
1932 (unsigned long)(emu->silent_page.addr +
1933 emu->silent_page.bytes));
1935 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1936 if (emu->memhdr == NULL) {
1940 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1945 emu->fx8010.fxbus_mask = 0x303f;
1950 emu->fx8010.extin_mask = extin_mask;
1951 emu->fx8010.extout_mask = extout_mask;
1952 emu->enable_ir = enable_ir;
1954 if (emu->card_capabilities->ca_cardbus_chip) {
1955 err = snd_emu10k1_cardbus_init(emu);
1959 if (emu->card_capabilities->ecard) {
1960 err = snd_emu10k1_ecard_init(emu);
1963 } else if (emu->card_capabilities->emu_model) {
1964 err = snd_emu10k1_emu1010_init(emu);
1966 snd_emu10k1_free(emu);
1972 snd_emu10k1_ptr_write(emu, AC97SLOT, 0,
1977 emu->fx8010.itram_size = (16 * 1024)/2;
1978 emu->fx8010.etram_pages.area = NULL;
1979 emu->fx8010.etram_pages.bytes = 0;
1983 KBUILD_MODNAME, emu)) {
1987 emu->irq = pci->irq;
1988 card->sync_irq = emu->irq;
2004 emu->spdif_bits[0] = emu->spdif_bits[1] =
2005 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
2011 memset(emu->silent_page.area, 0, emu->silent_page.bytes);
2012 silent_page = emu->silent_page.addr << emu->address_mode;
2013 pgtbl = (__le32 *)emu->ptb_pages.area;
2014 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
2019 emu->voices[idx].emu = emu;
2020 emu->voices[idx].number = idx;
2023 err = snd_emu10k1_init(emu, enable_ir, 0);
2027 err = alloc_pm_buffer(emu);
2033 err = snd_emu10k1_init_efx(emu);
2036 snd_emu10k1_audio_enable(emu);
2038 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, emu, &ops);
2043 snd_emu10k1_proc_init(emu);
2046 *remu = emu;
2050 snd_emu10k1_free(emu);
2070 static int alloc_pm_buffer(struct snd_emu10k1 *emu)
2075 if (emu->audigy)
2077 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size));
2078 if (!emu->saved_ptr)
2080 if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
2082 if (emu->card_capabilities->ca0151_chip &&
2083 snd_p16v_alloc_pm_buffer(emu) < 0)
2088 static void free_pm_buffer(struct snd_emu10k1 *emu)
2090 vfree(emu->saved_ptr);
2091 snd_emu10k1_efx_free_pm_buffer(emu);
2092 if (emu->card_capabilities->ca0151_chip)
2093 snd_p16v_free_pm_buffer(emu);
2096 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
2102 val = emu->saved_ptr;
2105 *val = snd_emu10k1_ptr_read(emu, *reg, i);
2106 if (emu->audigy) {
2109 *val = snd_emu10k1_ptr_read(emu, *reg, i);
2111 if (emu->audigy)
2112 emu->saved_a_iocfg = inl(emu->port + A_IOCFG);
2113 emu->saved_hcfg = inl(emu->port + HCFG);
2116 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
2118 if (emu->card_capabilities->ca_cardbus_chip)
2119 snd_emu10k1_cardbus_init(emu);
2120 if (emu->card_capabilities->ecard)
2121 snd_emu10k1_ecard_init(emu);
2122 else if (emu->card_capabilities->emu_model)
2123 snd_emu10k1_emu1010_init(emu);
2125 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
2126 snd_emu10k1_init(emu, emu->enable_ir, 1);
2129 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
2135 snd_emu10k1_audio_enable(emu);
2138 if (emu->audigy)
2139 outl(emu->saved_a_iocfg, emu->port + A_IOCFG);
2140 outl(emu->saved_hcfg, emu->port + HCFG);
2142 val = emu->saved_ptr;
2145 snd_emu10k1_ptr_write(emu, *reg, i, *val);
2146 if (emu->audigy) {
2149 snd_emu10k1_ptr_write(emu, *reg, i, *val);