• Home
  • Raw
  • Download

Lines Matching +full:tcb +full:- +full:capture

6  *  Copyright (c) by James Courtier-Dutton <James@superbug.co.uk>
13 * --
16 * --
30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
107 if (emu->audigy) { in snd_emu10k1_voice_init()
148 { 0x0e, 0xcf }, /* Attenuation Left 0x01 = -103dB, 0xff = 24dB */
166 HCFG_MUTEBUTTONENABLE, emu->port + HCFG); in snd_emu10k1_init()
177 outl(0, emu->port + INTE); in snd_emu10k1_init()
183 if (emu->audigy) { in snd_emu10k1_init()
195 snd_emu10k1_ptr_write(emu, SPCS0, 0, emu->spdif_bits[0]); in snd_emu10k1_init()
196 snd_emu10k1_ptr_write(emu, SPCS1, 0, emu->spdif_bits[1]); in snd_emu10k1_init()
197 snd_emu10k1_ptr_write(emu, SPCS2, 0, emu->spdif_bits[2]); in snd_emu10k1_init()
199 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ in snd_emu10k1_init()
213 /* Enabled Phased (8-channel) P16V playback */ in snd_emu10k1_init()
214 outl(0x0201, emu->port + HCFG2); in snd_emu10k1_init()
218 if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */ in snd_emu10k1_init()
220 dev_info(emu->card->dev, "Audigy2 value: Special config.\n"); in snd_emu10k1_init()
228 outl(0x600000, emu->port + 0x20); in snd_emu10k1_init()
229 outl(0x14, emu->port + 0x24); in snd_emu10k1_init()
232 outl(0x7b0000, emu->port + 0x20); in snd_emu10k1_init()
233 outl(0xFF000000, emu->port + 0x24); in snd_emu10k1_init()
239 outl(0x7a0000, emu->port + 0x20); in snd_emu10k1_init()
240 outl(0xFF000000, emu->port + 0x24); in snd_emu10k1_init()
241 tmp = inl(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */ in snd_emu10k1_init()
242 outl(tmp, emu->port + A_IOCFG); in snd_emu10k1_init()
244 if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */ in snd_emu10k1_init()
254 * GPIO1: Speakers-enabled. in snd_emu10k1_init()
262 outl(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */ in snd_emu10k1_init()
264 if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */ in snd_emu10k1_init()
268 tmp = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
269 outl(tmp | 0x4, emu->port + A_IOCFG); /* Set bit 2 for mic input */ in snd_emu10k1_init()
270 tmp = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
275 emu->i2c_capture_volume[n][0] = 0xcf; in snd_emu10k1_init()
276 emu->i2c_capture_volume[n][1] = 0xcf; in snd_emu10k1_init()
281 snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr); in snd_emu10k1_init()
282 snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */ in snd_emu10k1_init()
285 …silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : … in snd_emu10k1_init()
291 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
294 HCFG_AUDIOENABLE, emu->port + HCFG); in snd_emu10k1_init()
302 } else if (emu->audigy) { in snd_emu10k1_init()
303 if (emu->revision == 4) /* audigy2 */ in snd_emu10k1_init()
307 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
309 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
310 /* FIXME: Remove all these emu->model and replace it with a card recognition parameter, in snd_emu10k1_init()
311 * e.g. card_capabilities->joystick */ in snd_emu10k1_init()
312 } else if (emu->model == 0x20 || in snd_emu10k1_init()
313 emu->model == 0xc400 || in snd_emu10k1_init()
314 (emu->model == 0x21 && emu->revision < 6)) in snd_emu10k1_init()
315 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG); in snd_emu10k1_init()
317 /* With on-chip joystick */ in snd_emu10k1_init()
318 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
321 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
323 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_init()
325 } else if (emu->audigy) { in snd_emu10k1_init()
326 unsigned int reg = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
327 outl(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG); in snd_emu10k1_init()
329 outl(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG); in snd_emu10k1_init()
331 outl(reg, emu->port + A_IOCFG); in snd_emu10k1_init()
333 unsigned int reg = inl(emu->port + HCFG); in snd_emu10k1_init()
334 outl(reg | HCFG_GPOUT2, emu->port + HCFG); in snd_emu10k1_init()
336 outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG); in snd_emu10k1_init()
338 outl(reg, emu->port + HCFG); in snd_emu10k1_init()
342 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
344 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_init()
346 } else if (emu->audigy) { /* enable analog output */ in snd_emu10k1_init()
347 unsigned int reg = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
348 outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG); in snd_emu10k1_init()
351 if (emu->address_mode == 0) { in snd_emu10k1_init()
353 outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG); in snd_emu10k1_init()
364 outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); in snd_emu10k1_audio_enable()
367 if (emu->card_capabilities->emu_model) { in snd_emu10k1_audio_enable()
369 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_audio_enable()
371 } else if (emu->audigy) { in snd_emu10k1_audio_enable()
372 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
374 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ in snd_emu10k1_audio_enable()
378 outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
379 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */ in snd_emu10k1_audio_enable()
381 outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
384 outl(inl(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
391 /* FIXME: the following routine disables LiveDrive-II !! */ in snd_emu10k1_audio_enable()
393 emu->tos_link = 0; in snd_emu10k1_audio_enable()
394 tmp = inl(emu->port + HCFG); in snd_emu10k1_audio_enable()
396 outl(tmp|0x800, emu->port + HCFG); in snd_emu10k1_audio_enable()
398 if (tmp != (inl(emu->port + HCFG) & ~0x800)) { in snd_emu10k1_audio_enable()
399 emu->tos_link = 1; in snd_emu10k1_audio_enable()
400 outl(tmp, emu->port + HCFG); in snd_emu10k1_audio_enable()
413 outl(0, emu->port + INTE); in snd_emu10k1_done()
436 snd_emu10k1_ptr_write(emu, TCB, 0, 0); in snd_emu10k1_done()
437 if (emu->audigy) in snd_emu10k1_done()
449 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG); in snd_emu10k1_done()
491 #define EC_CURRENT_PROM_VERSION 0x01 /* Self-explanatory. This should
495 #define EC_EEPROM_SIZE 0x40 /* ECARD EEPROM has 64 16-bit words */
506 * and is stored as a NULL-terminated
512 /* Most of this stuff is pretty self-evident. According to the hardware
526 * control latch will is loaded bit-serially by toggling the Modem control
539 hc_port = emu->port + HCFG; in snd_emu10k1_ecard_write()
576 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); in snd_emu10k1_ecard_setadcgain()
579 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); in snd_emu10k1_ecard_setadcgain()
584 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA); in snd_emu10k1_ecard_setadcgain()
595 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); in snd_emu10k1_ecard_setadcgain()
603 emu->ecard_ctrl = EC_RAW_RUN_MODE | in snd_emu10k1_ecard_init()
609 hc_value = inl(emu->port + HCFG); in snd_emu10k1_ecard_init()
610 outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG); in snd_emu10k1_ecard_init()
611 inl(emu->port + HCFG); in snd_emu10k1_ecard_init()
630 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); in snd_emu10k1_ecard_init()
644 * before the rest of the IO-Ports become active. in snd_emu10k1_cardbus_init()
646 special_port = emu->port + 0x38; in snd_emu10k1_cardbus_init()
675 return -EIO; in snd_emu1010_load_firmware_entry()
678 /* GPIO7 -> FPGA PGMN in snd_emu1010_load_firmware_entry()
679 * GPIO6 -> FPGA CCLK in snd_emu1010_load_firmware_entry()
680 * GPIO5 -> FPGA DIN in snd_emu1010_load_firmware_entry()
681 * FPGA CONFIG OFF -> FPGA PGMN in snd_emu1010_load_firmware_entry()
683 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu1010_load_firmware_entry()
684 outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ in snd_emu1010_load_firmware_entry()
685 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
687 outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ in snd_emu1010_load_firmware_entry()
688 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
690 for (n = 0; n < fw_entry->size; n++) { in snd_emu1010_load_firmware_entry()
691 value = fw_entry->data[n]; in snd_emu1010_load_firmware_entry()
697 outl(reg, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
698 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
699 outl(reg | 0x40, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
700 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
704 outl(0x10, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
705 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
706 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu1010_load_firmware_entry()
711 /* firmware file names, per model, init-fw and dock-fw (optional) */
734 filename = firmware_names[emu->card_capabilities->emu_model][dock]; in snd_emu1010_load_firmware()
737 err = request_firmware(fw, filename, &emu->pci->dev); in snd_emu1010_load_firmware()
753 if (emu->card->shutdown) in emu1010_firmware_work()
756 if (emu->suspend) in emu1010_firmware_work()
764 dev_info(emu->card->dev, in emu1010_firmware_work()
768 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw); in emu1010_firmware_work()
774 dev_info(emu->card->dev, in emu1010_firmware_work()
778 dev_info(emu->card->dev, in emu1010_firmware_work()
782 dev_info(emu->card->dev, in emu1010_firmware_work()
787 dev_info(emu->card->dev, in emu1010_firmware_work()
791 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2); in emu1010_firmware_work()
797 } else if (!reg && emu->emu1010.last_reg) { in emu1010_firmware_work()
799 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n"); in emu1010_firmware_work()
805 emu->emu1010.last_reg = reg; in emu1010_firmware_work()
806 if (!emu->card->shutdown) in emu1010_firmware_work()
807 schedule_delayed_work(&emu->emu1010.firmware_work, in emu1010_firmware_work()
812 * EMU-1010 - details found out from this driver, official MS Win drivers,
816 * ---------------------
818 * * conversion of 32-bit data coming over EMU32 links from HANA FPGA
819 * to 2 x 16-bit, using internal DSP instructions
822 * 32 x 32-bit serial EMU32 output channels
827 * ---------------
831 * * two crystals - for 44.1kHz and 48kHz multiples
833 * * inputs/outputs to Alice2 - see above
836 * ----------------------------
839 * 16 x 16-bit playback - snd_emu10k1_fx8010_playback_ops
840 * 16 x 32-bit capture - snd_emu10k1_capture_efx_ops
848 dev_info(emu->card->dev, "emu1010: Special config.\n"); in snd_emu10k1_emu1010_init()
849 /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
853 outl(0x0005a00c, emu->port + HCFG); in snd_emu10k1_emu1010_init()
854 /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
858 outl(0x0005a004, emu->port + HCFG); in snd_emu10k1_emu1010_init()
859 /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
862 outl(0x0005a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
863 /* AC97 2.1, Any 16Meg of 4Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
866 outl(0x0005a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
873 dev_dbg(emu->card->dev, "reg1 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
881 dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
884 dev_info(emu->card->dev, in snd_emu10k1_emu1010_init()
886 return -ENODEV; in snd_emu10k1_emu1010_init()
888 dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
890 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware); in snd_emu10k1_emu1010_init()
892 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n"); in snd_emu10k1_emu1010_init()
900 dev_info(emu->card->dev, in snd_emu10k1_emu1010_init()
903 return -ENODEV; in snd_emu10k1_emu1010_init()
906 dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n"); in snd_emu10k1_emu1010_init()
909 dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2); in snd_emu10k1_emu1010_init()
914 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
916 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
918 /* Optical -> ADAT I/O */ in snd_emu10k1_emu1010_init()
922 emu->emu1010.optical_in = 1; /* IN_ADAT */ in snd_emu10k1_emu1010_init()
923 emu->emu1010.optical_out = 1; /* IN_ADAT */ in snd_emu10k1_emu1010_init()
925 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) | in snd_emu10k1_emu1010_init()
926 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0); in snd_emu10k1_emu1010_init()
931 emu->emu1010.adc_pads = 0x00; in snd_emu10k1_emu1010_init()
933 /* Unmute Audio dock DACs, Headphone source DAC-4. */ in snd_emu10k1_emu1010_init()
939 emu->emu1010.dac_pads = 0x0f; in snd_emu10k1_emu1010_init()
955 dev_info(emu->card->dev, "emu1010: Card options3 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
1012 /* Pavel Hofman - setting defaults for 8 more capture channels in snd_emu10k1_emu1010_init()
1062 /* AudioDock Elink <- Silence */ in snd_emu10k1_emu1010_init()
1066 /* Hana SPDIF Out <- Silence */ in snd_emu10k1_emu1010_init()
1070 /* Hamoa DAC <- Silence */ in snd_emu10k1_emu1010_init()
1074 /* Hana ADAT Out <- Silence */ in snd_emu10k1_emu1010_init()
1093 /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
1097 outl(0x0000a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
1098 /* AC97 1.03, Any 32Meg of 2Gig address, Auto-Mute, EMU32 Slave, in snd_emu10k1_emu1010_init()
1100 * Un-Mute all codecs. in snd_emu10k1_emu1010_init()
1102 outl(0x0000a001, emu->port + HCFG); in snd_emu10k1_emu1010_init()
1125 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) { in snd_emu10k1_emu1010_init()
1130 emu->emu1010.output_source[0] = 17; in snd_emu10k1_emu1010_init()
1133 emu->emu1010.output_source[1] = 18; in snd_emu10k1_emu1010_init()
1136 emu->emu1010.output_source[2] = 19; in snd_emu10k1_emu1010_init()
1139 emu->emu1010.output_source[3] = 20; in snd_emu10k1_emu1010_init()
1142 emu->emu1010.output_source[4] = 21; in snd_emu10k1_emu1010_init()
1145 emu->emu1010.output_source[5] = 22; in snd_emu10k1_emu1010_init()
1149 emu->emu1010.output_source[16] = 17; in snd_emu10k1_emu1010_init()
1152 emu->emu1010.output_source[17] = 18; in snd_emu10k1_emu1010_init()
1157 emu->emu1010.output_source[0] = 21; in snd_emu10k1_emu1010_init()
1160 emu->emu1010.output_source[1] = 22; in snd_emu10k1_emu1010_init()
1163 emu->emu1010.output_source[2] = 23; in snd_emu10k1_emu1010_init()
1166 emu->emu1010.output_source[3] = 24; in snd_emu10k1_emu1010_init()
1169 emu->emu1010.output_source[4] = 25; in snd_emu10k1_emu1010_init()
1172 emu->emu1010.output_source[5] = 26; in snd_emu10k1_emu1010_init()
1175 emu->emu1010.output_source[6] = 27; in snd_emu10k1_emu1010_init()
1178 emu->emu1010.output_source[7] = 28; in snd_emu10k1_emu1010_init()
1182 emu->emu1010.output_source[8] = 21; in snd_emu10k1_emu1010_init()
1185 emu->emu1010.output_source[9] = 22; in snd_emu10k1_emu1010_init()
1189 emu->emu1010.output_source[10] = 21; in snd_emu10k1_emu1010_init()
1192 emu->emu1010.output_source[11] = 22; in snd_emu10k1_emu1010_init()
1196 emu->emu1010.output_source[12] = 21; in snd_emu10k1_emu1010_init()
1199 emu->emu1010.output_source[13] = 22; in snd_emu10k1_emu1010_init()
1203 emu->emu1010.output_source[14] = 21; in snd_emu10k1_emu1010_init()
1206 emu->emu1010.output_source[15] = 22; in snd_emu10k1_emu1010_init()
1210 emu->emu1010.output_source[16] = 21; in snd_emu10k1_emu1010_init()
1213 emu->emu1010.output_source[17] = 22; in snd_emu10k1_emu1010_init()
1216 emu->emu1010.output_source[18] = 23; in snd_emu10k1_emu1010_init()
1219 emu->emu1010.output_source[19] = 24; in snd_emu10k1_emu1010_init()
1222 emu->emu1010.output_source[20] = 25; in snd_emu10k1_emu1010_init()
1225 emu->emu1010.output_source[21] = 26; in snd_emu10k1_emu1010_init()
1228 emu->emu1010.output_source[22] = 27; in snd_emu10k1_emu1010_init()
1231 emu->emu1010.output_source[23] = 28; in snd_emu10k1_emu1010_init()
1242 emu->emu1010.internal_clock = 1; /* 48000 */ in snd_emu10k1_emu1010_init()
1262 if (emu->port) { /* avoid access to already used hardware */ in snd_emu10k1_free()
1267 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) { in snd_emu10k1_free()
1271 cancel_delayed_work_sync(&emu->emu1010.firmware_work); in snd_emu10k1_free()
1272 release_firmware(emu->firmware); in snd_emu10k1_free()
1273 release_firmware(emu->dock_fw); in snd_emu10k1_free()
1274 if (emu->irq >= 0) in snd_emu10k1_free()
1275 free_irq(emu->irq, emu); in snd_emu10k1_free()
1276 snd_util_memhdr_free(emu->memhdr); in snd_emu10k1_free()
1277 if (emu->silent_page.area) in snd_emu10k1_free()
1278 snd_dma_free_pages(&emu->silent_page); in snd_emu10k1_free()
1279 if (emu->ptb_pages.area) in snd_emu10k1_free()
1280 snd_dma_free_pages(&emu->ptb_pages); in snd_emu10k1_free()
1281 vfree(emu->page_ptr_table); in snd_emu10k1_free()
1282 vfree(emu->page_addr_table); in snd_emu10k1_free()
1286 if (emu->port) in snd_emu10k1_free()
1287 pci_release_regions(emu->pci); in snd_emu10k1_free()
1288 if (emu->card_capabilities->ca0151_chip) /* P16V */ in snd_emu10k1_free()
1290 pci_disable_device(emu->pci); in snd_emu10k1_free()
1297 struct snd_emu10k1 *emu = device->device_data; in snd_emu10k1_dev_free()
1304 /* DSP: CA10300-IAT LF
1305 * DAC: Cirrus Logic CS4382-KQZ
1316 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
1325 * 3: 0 - Digital Out, 1 - Line in
1341 * 0 - Digital Out
1342 * 1 - Line in
1350 /* DSP: CA10300-IAT LF
1351 * DAC: Cirrus Logic CS4382-KQZ
1362 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
1368 /* DSP: CA0108-IAT
1369 * DAC: CS4382-KQ
1407 * 8-9: 0 = Line in/Mic, 2 = Optical in, 3 = Nothing.
1408 * A-B: 0 = Headphones, 2 = Optical out, 3 = Nothing.
1409 * C-D: 2 = Front/Rear/etc, 3 = nothing.
1410 * E-F: Always 0
1424 .driver = "Audigy2", .name = "E-mu 1010 Notebook [MAEM8950]",
1434 .driver = "Audigy2", .name = "E-mu 1010b PCI [MAEM8960]",
1443 .driver = "Audigy2", .name = "E-mu 1010 PCIe [MAEM8986]",
1452 .driver = "Audigy2", .name = "E-mu 1010 [MAEM8810]",
1460 .driver = "Audigy2", .name = "E-mu 0404b PCI [MAEM8852]",
1466 /* Tested by James@superbug.co.uk 20-3-2007. */
1468 .driver = "Audigy2", .name = "E-mu 0404 [MAEM8850]",
1476 .driver = "Audigy2", .name = "E-mu 0404 PCIe [MAEM8984]",
1482 /* Note that all E-mu cards require kernel 2.6 or newer. */
1499 /* Tested by shane-alsa@cm.nu 5th Nov 2005 */
1547 /* DSP: CA0102-IAT
1548 * DAC: CS4382-KQ
1561 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
1592 .adc_1361t = 1, /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */
1737 .driver = "EMU10K1", .name = "E-mu APS [PC545]",
1774 * detect that the device is behind a non-passthrough IOMMU.
1780 emu->iommu_workaround = false; in snd_emu10k1_detect_iommu()
1782 if (!iommu_present(emu->card->dev->bus)) in snd_emu10k1_detect_iommu()
1785 domain = iommu_get_domain_for_dev(emu->card->dev); in snd_emu10k1_detect_iommu()
1786 if (domain && domain->type == IOMMU_DOMAIN_IDENTITY) in snd_emu10k1_detect_iommu()
1789 dev_notice(emu->card->dev, in snd_emu10k1_detect_iommu()
1790 "non-passthrough IOMMU detected, widening DMA allocations"); in snd_emu10k1_detect_iommu()
1791 emu->iommu_workaround = true; in snd_emu10k1_detect_iommu()
1823 return -ENOMEM; in snd_emu10k1_create()
1825 emu->card = card; in snd_emu10k1_create()
1826 spin_lock_init(&emu->reg_lock); in snd_emu10k1_create()
1827 spin_lock_init(&emu->emu_lock); in snd_emu10k1_create()
1828 spin_lock_init(&emu->spi_lock); in snd_emu10k1_create()
1829 spin_lock_init(&emu->i2c_lock); in snd_emu10k1_create()
1830 spin_lock_init(&emu->voice_lock); in snd_emu10k1_create()
1831 spin_lock_init(&emu->synth_lock); in snd_emu10k1_create()
1832 spin_lock_init(&emu->memblk_lock); in snd_emu10k1_create()
1833 mutex_init(&emu->fx8010.lock); in snd_emu10k1_create()
1834 INIT_LIST_HEAD(&emu->mapped_link_head); in snd_emu10k1_create()
1835 INIT_LIST_HEAD(&emu->mapped_order_link_head); in snd_emu10k1_create()
1836 emu->pci = pci; in snd_emu10k1_create()
1837 emu->irq = -1; in snd_emu10k1_create()
1838 emu->synth = NULL; in snd_emu10k1_create()
1839 emu->get_synth_voice = NULL; in snd_emu10k1_create()
1840 INIT_DELAYED_WORK(&emu->emu1010.firmware_work, emu1010_firmware_work); in snd_emu10k1_create()
1842 emu->revision = pci->revision; in snd_emu10k1_create()
1843 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial); in snd_emu10k1_create()
1844 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model); in snd_emu10k1_create()
1845 dev_dbg(card->dev, in snd_emu10k1_create()
1847 pci->vendor, pci->device, emu->serial, emu->model); in snd_emu10k1_create()
1849 for (c = emu_chip_details; c->vendor; c++) { in snd_emu10k1_create()
1850 if (c->vendor == pci->vendor && c->device == pci->device) { in snd_emu10k1_create()
1852 if (c->subsystem && (c->subsystem == subsystem)) in snd_emu10k1_create()
1857 if (c->subsystem && (c->subsystem != emu->serial)) in snd_emu10k1_create()
1859 if (c->revision && c->revision != emu->revision) in snd_emu10k1_create()
1865 if (c->vendor == 0) { in snd_emu10k1_create()
1866 dev_err(card->dev, "emu10k1: Card not recognised\n"); in snd_emu10k1_create()
1869 return -ENOENT; in snd_emu10k1_create()
1871 emu->card_capabilities = c; in snd_emu10k1_create()
1872 if (c->subsystem && !subsystem) in snd_emu10k1_create()
1873 dev_dbg(card->dev, "Sound card name = %s\n", c->name); in snd_emu10k1_create()
1875 dev_dbg(card->dev, "Sound card name = %s, " in snd_emu10k1_create()
1877 "Forced to subsystem = 0x%x\n", c->name, in snd_emu10k1_create()
1878 pci->vendor, pci->device, emu->serial, c->subsystem); in snd_emu10k1_create()
1880 dev_dbg(card->dev, "Sound card name = %s, " in snd_emu10k1_create()
1882 c->name, pci->vendor, pci->device, in snd_emu10k1_create()
1883 emu->serial); in snd_emu10k1_create()
1885 if (!*card->id && c->id) { in snd_emu10k1_create()
1887 strlcpy(card->id, c->id, sizeof(card->id)); in snd_emu10k1_create()
1890 if (snd_cards[i] && !strcmp(snd_cards[i]->id, card->id)) in snd_emu10k1_create()
1898 snprintf(card->id, sizeof(card->id), "%s_%d", c->id, n); in snd_emu10k1_create()
1902 is_audigy = emu->audigy = c->emu10k2_chip; in snd_emu10k1_create()
1907 emu->address_mode = is_audigy ? 0 : 1; in snd_emu10k1_create()
1909 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK; in snd_emu10k1_create()
1910 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) { in snd_emu10k1_create()
1911 dev_err(card->dev, in snd_emu10k1_create()
1913 emu->dma_mask); in snd_emu10k1_create()
1916 return -ENXIO; in snd_emu10k1_create()
1919 emu->gpr_base = A_FXGPREGBASE; in snd_emu10k1_create()
1921 emu->gpr_base = FXGPREGBASE; in snd_emu10k1_create()
1929 emu->port = pci_resource_start(pci, 0); in snd_emu10k1_create()
1931 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; in snd_emu10k1_create()
1933 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 : in snd_emu10k1_create()
1936 &emu->ptb_pages) < 0) { in snd_emu10k1_create()
1937 err = -ENOMEM; in snd_emu10k1_create()
1940 dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n", in snd_emu10k1_create()
1941 (unsigned long)emu->ptb_pages.addr, in snd_emu10k1_create()
1942 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes)); in snd_emu10k1_create()
1944 emu->page_ptr_table = vmalloc(array_size(sizeof(void *), in snd_emu10k1_create()
1945 emu->max_cache_pages)); in snd_emu10k1_create()
1946 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long), in snd_emu10k1_create()
1947 emu->max_cache_pages)); in snd_emu10k1_create()
1948 if (emu->page_ptr_table == NULL || emu->page_addr_table == NULL) { in snd_emu10k1_create()
1949 err = -ENOMEM; in snd_emu10k1_create()
1954 &emu->silent_page) < 0) { in snd_emu10k1_create()
1955 err = -ENOMEM; in snd_emu10k1_create()
1958 dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n", in snd_emu10k1_create()
1959 (unsigned long)emu->silent_page.addr, in snd_emu10k1_create()
1960 (unsigned long)(emu->silent_page.addr + in snd_emu10k1_create()
1961 emu->silent_page.bytes)); in snd_emu10k1_create()
1963 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE); in snd_emu10k1_create()
1964 if (emu->memhdr == NULL) { in snd_emu10k1_create()
1965 err = -ENOMEM; in snd_emu10k1_create()
1968 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) - in snd_emu10k1_create()
1973 emu->fx8010.fxbus_mask = 0x303f; in snd_emu10k1_create()
1978 emu->fx8010.extin_mask = extin_mask; in snd_emu10k1_create()
1979 emu->fx8010.extout_mask = extout_mask; in snd_emu10k1_create()
1980 emu->enable_ir = enable_ir; in snd_emu10k1_create()
1982 if (emu->card_capabilities->ca_cardbus_chip) { in snd_emu10k1_create()
1987 if (emu->card_capabilities->ecard) { in snd_emu10k1_create()
1991 } else if (emu->card_capabilities->emu_model) { in snd_emu10k1_create()
2005 emu->fx8010.itram_size = (16 * 1024)/2; in snd_emu10k1_create()
2006 emu->fx8010.etram_pages.area = NULL; in snd_emu10k1_create()
2007 emu->fx8010.etram_pages.bytes = 0; in snd_emu10k1_create()
2010 if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED, in snd_emu10k1_create()
2012 err = -EBUSY; in snd_emu10k1_create()
2015 emu->irq = pci->irq; in snd_emu10k1_create()
2031 emu->spdif_bits[0] = emu->spdif_bits[1] = in snd_emu10k1_create()
2032 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | in snd_emu10k1_create()
2038 memset(emu->silent_page.area, 0, emu->silent_page.bytes); in snd_emu10k1_create()
2039 silent_page = emu->silent_page.addr << emu->address_mode; in snd_emu10k1_create()
2040 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++) in snd_emu10k1_create()
2041 ((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx); in snd_emu10k1_create()
2045 emu->voices[idx].emu = emu; in snd_emu10k1_create()
2046 emu->voices[idx].number = idx; in snd_emu10k1_create()
2101 if (emu->audigy) in alloc_pm_buffer()
2103 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size)); in alloc_pm_buffer()
2104 if (!emu->saved_ptr) in alloc_pm_buffer()
2105 return -ENOMEM; in alloc_pm_buffer()
2107 return -ENOMEM; in alloc_pm_buffer()
2108 if (emu->card_capabilities->ca0151_chip && in alloc_pm_buffer()
2110 return -ENOMEM; in alloc_pm_buffer()
2116 vfree(emu->saved_ptr); in free_pm_buffer()
2118 if (emu->card_capabilities->ca0151_chip) in free_pm_buffer()
2128 val = emu->saved_ptr; in snd_emu10k1_suspend_regs()
2132 if (emu->audigy) { in snd_emu10k1_suspend_regs()
2137 if (emu->audigy) in snd_emu10k1_suspend_regs()
2138 emu->saved_a_iocfg = inl(emu->port + A_IOCFG); in snd_emu10k1_suspend_regs()
2139 emu->saved_hcfg = inl(emu->port + HCFG); in snd_emu10k1_suspend_regs()
2144 if (emu->card_capabilities->ca_cardbus_chip) in snd_emu10k1_resume_init()
2146 if (emu->card_capabilities->ecard) in snd_emu10k1_resume_init()
2148 else if (emu->card_capabilities->emu_model) in snd_emu10k1_resume_init()
2152 snd_emu10k1_init(emu, emu->enable_ir, 1); in snd_emu10k1_resume_init()
2164 if (emu->audigy) in snd_emu10k1_resume_regs()
2165 outl(emu->saved_a_iocfg, emu->port + A_IOCFG); in snd_emu10k1_resume_regs()
2166 outl(emu->saved_hcfg, emu->port + HCFG); in snd_emu10k1_resume_regs()
2168 val = emu->saved_ptr; in snd_emu10k1_resume_regs()
2172 if (emu->audigy) { in snd_emu10k1_resume_regs()