1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Copyright (c) by Jaroslav Kysela <perex@perex.cz> 4 * James Courtier-Dutton <James@superbug.co.uk> 5 * Oswald Buddenhagen <oswald.buddenhagen@gmx.de> 6 * Creative Labs, Inc. 7 * 8 * Routines for control of EMU10K1 chips 9 */ 10 11 #include <linux/sched.h> 12 #include <linux/delay.h> 13 #include <linux/init.h> 14 #include <linux/module.h> 15 #include <linux/interrupt.h> 16 #include <linux/iommu.h> 17 #include <linux/pci.h> 18 #include <linux/slab.h> 19 #include <linux/vmalloc.h> 20 #include <linux/mutex.h> 21 22 23 #include <sound/core.h> 24 #include <sound/emu10k1.h> 25 #include <linux/firmware.h> 26 #include "p16v.h" 27 #include "tina2.h" 28 #include "p17v.h" 29 30 31 #define HANA_FILENAME "emu/hana.fw" 32 #define DOCK_FILENAME "emu/audio_dock.fw" 33 #define EMU1010B_FILENAME "emu/emu1010b.fw" 34 #define MICRO_DOCK_FILENAME "emu/micro_dock.fw" 35 #define EMU0404_FILENAME "emu/emu0404.fw" 36 #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw" 37 38 MODULE_FIRMWARE(HANA_FILENAME); 39 MODULE_FIRMWARE(DOCK_FILENAME); 40 MODULE_FIRMWARE(EMU1010B_FILENAME); 41 MODULE_FIRMWARE(MICRO_DOCK_FILENAME); 42 MODULE_FIRMWARE(EMU0404_FILENAME); 43 MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME); 44 45 46 /************************************************************************* 47 * EMU10K1 init / done 48 *************************************************************************/ 49 50 void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch) 51 { 52 snd_emu10k1_ptr_write_multiple(emu, ch, 53 DCYSUSV, 0, 54 VTFT, VTFT_FILTERTARGET_MASK, 55 CVCF, CVCF_CURRENTFILTER_MASK, 56 PTRX, 0, 57 CPF, 0, 58 CCR, 0, 59 60 PSST, 0, 61 DSL, 0x10, 62 CCCA, 0, 63 Z1, 0, 64 Z2, 0, 65 FXRT, 0x32100000, 66 67 // The rest is meaningless as long as DCYSUSV_CHANNELENABLE_MASK is zero 68 DCYSUSM, 0, 69 ATKHLDV, 0, 70 ATKHLDM, 0, 71 IP, 0, 72 IFATN, IFATN_FILTERCUTOFF_MASK | IFATN_ATTENUATION_MASK, 73 PEFE, 0, 74 FMMOD, 0, 75 TREMFRQ, 24, /* 1 Hz */ 76 FM2FRQ2, 24, /* 1 Hz */ 77 LFOVAL2, 0, 78 LFOVAL1, 0, 79 ENVVOL, 0, 80 ENVVAL, 0, 81 82 REGLIST_END); 83 84 /* Audigy extra stuffs */ 85 if (emu->audigy) { 86 snd_emu10k1_ptr_write_multiple(emu, ch, 87 A_CSBA, 0, 88 A_CSDC, 0, 89 A_CSFE, 0, 90 A_CSHG, 0, 91 A_FXRT1, 0x03020100, 92 A_FXRT2, 0x07060504, 93 A_SENDAMOUNTS, 0, 94 REGLIST_END); 95 } 96 } 97 98 static const unsigned int spi_dac_init[] = { 99 0x00ff, 100 0x02ff, 101 0x0400, 102 0x0520, 103 0x0600, 104 0x08ff, 105 0x0aff, 106 0x0cff, 107 0x0eff, 108 0x10ff, 109 0x1200, 110 0x1400, 111 0x1480, 112 0x1800, 113 0x1aff, 114 0x1cff, 115 0x1e00, 116 0x0530, 117 0x0602, 118 0x0622, 119 0x1400, 120 }; 121 122 static const unsigned int i2c_adc_init[][2] = { 123 { 0x17, 0x00 }, /* Reset */ 124 { 0x07, 0x00 }, /* Timeout */ 125 { 0x0b, 0x22 }, /* Interface control */ 126 { 0x0c, 0x22 }, /* Master mode control */ 127 { 0x0d, 0x08 }, /* Powerdown control */ 128 { 0x0e, 0xcf }, /* Attenuation Left 0x01 = -103dB, 0xff = 24dB */ 129 { 0x0f, 0xcf }, /* Attenuation Right 0.5dB steps */ 130 { 0x10, 0x7b }, /* ALC Control 1 */ 131 { 0x11, 0x00 }, /* ALC Control 2 */ 132 { 0x12, 0x32 }, /* ALC Control 3 */ 133 { 0x13, 0x00 }, /* Noise gate control */ 134 { 0x14, 0xa6 }, /* Limiter control */ 135 { 0x15, ADC_MUX_2 }, /* ADC Mixer control. Mic for A2ZS Notebook */ 136 }; 137 138 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir) 139 { 140 unsigned int silent_page; 141 int ch; 142 u32 tmp; 143 144 /* disable audio and lock cache */ 145 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | 146 HCFG_MUTEBUTTONENABLE, emu->port + HCFG); 147 148 outl(0, emu->port + INTE); 149 150 snd_emu10k1_ptr_write_multiple(emu, 0, 151 /* reset recording buffers */ 152 MICBS, ADCBS_BUFSIZE_NONE, 153 MICBA, 0, 154 FXBS, ADCBS_BUFSIZE_NONE, 155 FXBA, 0, 156 ADCBS, ADCBS_BUFSIZE_NONE, 157 ADCBA, 0, 158 159 /* disable channel interrupt */ 160 CLIEL, 0, 161 CLIEH, 0, 162 163 /* disable stop on loop end */ 164 SOLEL, 0, 165 SOLEH, 0, 166 167 REGLIST_END); 168 169 if (emu->audigy) { 170 /* set SPDIF bypass mode */ 171 snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT); 172 /* enable rear left + rear right AC97 slots */ 173 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT | 174 AC97SLOT_REAR_LEFT); 175 } 176 177 /* init envelope engine */ 178 for (ch = 0; ch < NUM_G; ch++) 179 snd_emu10k1_voice_init(emu, ch); 180 181 snd_emu10k1_ptr_write_multiple(emu, 0, 182 SPCS0, emu->spdif_bits[0], 183 SPCS1, emu->spdif_bits[1], 184 SPCS2, emu->spdif_bits[2], 185 REGLIST_END); 186 187 if (emu->card_capabilities->emu_model) { 188 } else if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ 189 /* Hacks for Alice3 to work independent of haP16V driver */ 190 /* Setup SRCMulti_I2S SamplingRate */ 191 snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000); 192 193 /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */ 194 snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14); 195 /* Setup SRCMulti Input Audio Enable */ 196 /* Use 0xFFFFFFFF to enable P16V sounds. */ 197 snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF); 198 199 /* Enabled Phased (8-channel) P16V playback */ 200 outl(0x0201, emu->port + HCFG2); 201 /* Set playback routing. */ 202 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4); 203 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */ 204 /* Hacks for Alice3 to work independent of haP16V driver */ 205 dev_info(emu->card->dev, "Audigy2 value: Special config.\n"); 206 /* Setup SRCMulti_I2S SamplingRate */ 207 snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000); 208 209 /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */ 210 snd_emu10k1_ptr20_write(emu, P17V_SRCSel, 0, 0x14); 211 212 /* Setup SRCMulti Input Audio Enable */ 213 snd_emu10k1_ptr20_write(emu, P17V_MIXER_I2S_ENABLE, 0, 0xFF000000); 214 215 /* Setup SPDIF Out Audio Enable */ 216 /* The Audigy 2 Value has a separate SPDIF out, 217 * so no need for a mixer switch 218 */ 219 snd_emu10k1_ptr20_write(emu, P17V_MIXER_SPDIF_ENABLE, 0, 0xFF000000); 220 221 tmp = inw(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */ 222 outw(tmp, emu->port + A_IOCFG); 223 } 224 if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */ 225 int size, n; 226 227 size = ARRAY_SIZE(spi_dac_init); 228 for (n = 0; n < size; n++) 229 snd_emu10k1_spi_write(emu, spi_dac_init[n]); 230 231 snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10); 232 /* Enable GPIOs 233 * GPIO0: Unknown 234 * GPIO1: Speakers-enabled. 235 * GPIO2: Unknown 236 * GPIO3: Unknown 237 * GPIO4: IEC958 Output on. 238 * GPIO5: Unknown 239 * GPIO6: Unknown 240 * GPIO7: Unknown 241 */ 242 outw(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */ 243 } 244 if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */ 245 int size, n; 246 247 snd_emu10k1_ptr20_write(emu, P17V_I2S_SRC_SEL, 0, 0x2020205f); 248 tmp = inw(emu->port + A_IOCFG); 249 outw(tmp | 0x4, emu->port + A_IOCFG); /* Set bit 2 for mic input */ 250 tmp = inw(emu->port + A_IOCFG); 251 size = ARRAY_SIZE(i2c_adc_init); 252 for (n = 0; n < size; n++) 253 snd_emu10k1_i2c_write(emu, i2c_adc_init[n][0], i2c_adc_init[n][1]); 254 for (n = 0; n < 4; n++) { 255 emu->i2c_capture_volume[n][0] = 0xcf; 256 emu->i2c_capture_volume[n][1] = 0xcf; 257 } 258 } 259 260 261 snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr); 262 snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */ 263 snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_256K); /* taken from original driver */ 264 265 silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0); 266 for (ch = 0; ch < NUM_G; ch++) { 267 snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page); 268 snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); 269 } 270 271 if (emu->card_capabilities->emu_model) { 272 outl(HCFG_AUTOMUTE_ASYNC | 273 HCFG_EMU32_SLAVE | 274 HCFG_AUDIOENABLE, emu->port + HCFG); 275 /* 276 * Hokay, setup HCFG 277 * Mute Disable Audio = 0 278 * Lock Tank Memory = 1 279 * Lock Sound Memory = 0 280 * Auto Mute = 1 281 */ 282 } else if (emu->audigy) { 283 if (emu->revision == 4) /* audigy2 */ 284 outl(HCFG_AUDIOENABLE | 285 HCFG_AC3ENABLE_CDSPDIF | 286 HCFG_AC3ENABLE_GPSPDIF | 287 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); 288 else 289 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); 290 /* FIXME: Remove all these emu->model and replace it with a card recognition parameter, 291 * e.g. card_capabilities->joystick */ 292 } else if (emu->model == 0x20 || 293 emu->model == 0xc400 || 294 (emu->model == 0x21 && emu->revision < 6)) 295 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG); 296 else 297 /* With on-chip joystick */ 298 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); 299 300 if (enable_ir) { /* enable IR for SB Live */ 301 if (emu->card_capabilities->emu_model) { 302 ; /* Disable all access to A_IOCFG for the emu1010 */ 303 } else if (emu->card_capabilities->i2c_adc) { 304 ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ 305 } else if (emu->audigy) { 306 u16 reg = inw(emu->port + A_IOCFG); 307 outw(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG); 308 udelay(500); 309 outw(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG); 310 udelay(100); 311 outw(reg, emu->port + A_IOCFG); 312 } else { 313 unsigned int reg = inl(emu->port + HCFG); 314 outl(reg | HCFG_GPOUT2, emu->port + HCFG); 315 udelay(500); 316 outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG); 317 udelay(100); 318 outl(reg, emu->port + HCFG); 319 } 320 } 321 322 if (emu->card_capabilities->emu_model) { 323 ; /* Disable all access to A_IOCFG for the emu1010 */ 324 } else if (emu->card_capabilities->i2c_adc) { 325 ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ 326 } else if (emu->audigy) { /* enable analog output */ 327 u16 reg = inw(emu->port + A_IOCFG); 328 outw(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG); 329 } 330 331 if (emu->address_mode == 0) { 332 /* use 16M in 4G */ 333 outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG); 334 } 335 336 return 0; 337 } 338 339 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu) 340 { 341 /* 342 * Enable the audio bit 343 */ 344 outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); 345 346 /* Enable analog/digital outs on audigy */ 347 if (emu->card_capabilities->emu_model) { 348 ; /* Disable all access to A_IOCFG for the emu1010 */ 349 } else if (emu->card_capabilities->i2c_adc) { 350 ; /* Disable A_IOCFG for Audigy 2 ZS Notebook */ 351 } else if (emu->audigy) { 352 outw(inw(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG); 353 354 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ 355 /* Unmute Analog now. Set GPO6 to 1 for Apollo. 356 * This has to be done after init ALice3 I2SOut beyond 48KHz. 357 * So, sequence is important. */ 358 outw(inw(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG); 359 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */ 360 /* Unmute Analog now. */ 361 outw(inw(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG); 362 } else { 363 /* Disable routing from AC97 line out to Front speakers */ 364 outw(inw(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG); 365 } 366 } 367 368 #if 0 369 { 370 unsigned int tmp; 371 /* FIXME: the following routine disables LiveDrive-II !! */ 372 /* TOSLink detection */ 373 emu->tos_link = 0; 374 tmp = inl(emu->port + HCFG); 375 if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) { 376 outl(tmp|0x800, emu->port + HCFG); 377 udelay(50); 378 if (tmp != (inl(emu->port + HCFG) & ~0x800)) { 379 emu->tos_link = 1; 380 outl(tmp, emu->port + HCFG); 381 } 382 } 383 } 384 #endif 385 386 if (emu->card_capabilities->emu_model) 387 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE | INTE_A_GPIOENABLE); 388 else 389 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE); 390 } 391 392 int snd_emu10k1_done(struct snd_emu10k1 *emu) 393 { 394 int ch; 395 396 outl(0, emu->port + INTE); 397 398 /* 399 * Shutdown the voices 400 */ 401 for (ch = 0; ch < NUM_G; ch++) { 402 snd_emu10k1_ptr_write_multiple(emu, ch, 403 DCYSUSV, 0, 404 VTFT, 0, 405 CVCF, 0, 406 PTRX, 0, 407 CPF, 0, 408 REGLIST_END); 409 } 410 411 // stop the DSP 412 if (emu->audigy) 413 snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP); 414 else 415 snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP); 416 417 snd_emu10k1_ptr_write_multiple(emu, 0, 418 /* reset recording buffers */ 419 MICBS, 0, 420 MICBA, 0, 421 FXBS, 0, 422 FXBA, 0, 423 FXWC, 0, 424 ADCBS, ADCBS_BUFSIZE_NONE, 425 ADCBA, 0, 426 TCBS, TCBS_BUFFSIZE_16K, 427 TCB, 0, 428 429 /* disable channel interrupt */ 430 CLIEL, 0, 431 CLIEH, 0, 432 SOLEL, 0, 433 SOLEH, 0, 434 435 PTB, 0, 436 437 REGLIST_END); 438 439 /* disable audio and lock cache */ 440 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG); 441 442 return 0; 443 } 444 445 /************************************************************************* 446 * ECARD functional implementation 447 *************************************************************************/ 448 449 /* In A1 Silicon, these bits are in the HC register */ 450 #define HOOKN_BIT (1L << 12) 451 #define HANDN_BIT (1L << 11) 452 #define PULSEN_BIT (1L << 10) 453 454 #define EC_GDI1 (1 << 13) 455 #define EC_GDI0 (1 << 14) 456 457 #define EC_NUM_CONTROL_BITS 20 458 459 #define EC_AC3_DATA_SELN 0x0001L 460 #define EC_EE_DATA_SEL 0x0002L 461 #define EC_EE_CNTRL_SELN 0x0004L 462 #define EC_EECLK 0x0008L 463 #define EC_EECS 0x0010L 464 #define EC_EESDO 0x0020L 465 #define EC_TRIM_CSN 0x0040L 466 #define EC_TRIM_SCLK 0x0080L 467 #define EC_TRIM_SDATA 0x0100L 468 #define EC_TRIM_MUTEN 0x0200L 469 #define EC_ADCCAL 0x0400L 470 #define EC_ADCRSTN 0x0800L 471 #define EC_DACCAL 0x1000L 472 #define EC_DACMUTEN 0x2000L 473 #define EC_LEDN 0x4000L 474 475 #define EC_SPDIF0_SEL_SHIFT 15 476 #define EC_SPDIF1_SEL_SHIFT 17 477 #define EC_SPDIF0_SEL_MASK (0x3L << EC_SPDIF0_SEL_SHIFT) 478 #define EC_SPDIF1_SEL_MASK (0x7L << EC_SPDIF1_SEL_SHIFT) 479 #define EC_SPDIF0_SELECT(_x) (((_x) << EC_SPDIF0_SEL_SHIFT) & EC_SPDIF0_SEL_MASK) 480 #define EC_SPDIF1_SELECT(_x) (((_x) << EC_SPDIF1_SEL_SHIFT) & EC_SPDIF1_SEL_MASK) 481 #define EC_CURRENT_PROM_VERSION 0x01 /* Self-explanatory. This should 482 * be incremented any time the EEPROM's 483 * format is changed. */ 484 485 #define EC_EEPROM_SIZE 0x40 /* ECARD EEPROM has 64 16-bit words */ 486 487 /* Addresses for special values stored in to EEPROM */ 488 #define EC_PROM_VERSION_ADDR 0x20 /* Address of the current prom version */ 489 #define EC_BOARDREV0_ADDR 0x21 /* LSW of board rev */ 490 #define EC_BOARDREV1_ADDR 0x22 /* MSW of board rev */ 491 492 #define EC_LAST_PROMFILE_ADDR 0x2f 493 494 #define EC_SERIALNUM_ADDR 0x30 /* First word of serial number. The 495 * can be up to 30 characters in length 496 * and is stored as a NULL-terminated 497 * ASCII string. Any unused bytes must be 498 * filled with zeros */ 499 #define EC_CHECKSUM_ADDR 0x3f /* Location at which checksum is stored */ 500 501 502 /* Most of this stuff is pretty self-evident. According to the hardware 503 * dudes, we need to leave the ADCCAL bit low in order to avoid a DC 504 * offset problem. Weird. 505 */ 506 #define EC_RAW_RUN_MODE (EC_DACMUTEN | EC_ADCRSTN | EC_TRIM_MUTEN | \ 507 EC_TRIM_CSN) 508 509 510 #define EC_DEFAULT_ADC_GAIN 0xC4C4 511 #define EC_DEFAULT_SPDIF0_SEL 0x0 512 #define EC_DEFAULT_SPDIF1_SEL 0x4 513 514 /************************************************************************** 515 * @func Clock bits into the Ecard's control latch. The Ecard uses a 516 * control latch will is loaded bit-serially by toggling the Modem control 517 * lines from function 2 on the E8010. This function hides these details 518 * and presents the illusion that we are actually writing to a distinct 519 * register. 520 */ 521 522 static void snd_emu10k1_ecard_write(struct snd_emu10k1 *emu, unsigned int value) 523 { 524 unsigned short count; 525 unsigned int data; 526 unsigned long hc_port; 527 unsigned int hc_value; 528 529 hc_port = emu->port + HCFG; 530 hc_value = inl(hc_port) & ~(HOOKN_BIT | HANDN_BIT | PULSEN_BIT); 531 outl(hc_value, hc_port); 532 533 for (count = 0; count < EC_NUM_CONTROL_BITS; count++) { 534 535 /* Set up the value */ 536 data = ((value & 0x1) ? PULSEN_BIT : 0); 537 value >>= 1; 538 539 outl(hc_value | data, hc_port); 540 541 /* Clock the shift register */ 542 outl(hc_value | data | HANDN_BIT, hc_port); 543 outl(hc_value | data, hc_port); 544 } 545 546 /* Latch the bits */ 547 outl(hc_value | HOOKN_BIT, hc_port); 548 outl(hc_value, hc_port); 549 } 550 551 /************************************************************************** 552 * @func Set the gain of the ECARD's CS3310 Trim/gain controller. The 553 * trim value consists of a 16bit value which is composed of two 554 * 8 bit gain/trim values, one for the left channel and one for the 555 * right channel. The following table maps from the Gain/Attenuation 556 * value in decibels into the corresponding bit pattern for a single 557 * channel. 558 */ 559 560 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 *emu, 561 unsigned short gain) 562 { 563 unsigned int bit; 564 565 /* Enable writing to the TRIM registers */ 566 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); 567 568 /* Do it again to insure that we meet hold time requirements */ 569 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); 570 571 for (bit = (1 << 15); bit; bit >>= 1) { 572 unsigned int value; 573 574 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA); 575 576 if (gain & bit) 577 value |= EC_TRIM_SDATA; 578 579 /* Clock the bit */ 580 snd_emu10k1_ecard_write(emu, value); 581 snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK); 582 snd_emu10k1_ecard_write(emu, value); 583 } 584 585 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); 586 } 587 588 static int snd_emu10k1_ecard_init(struct snd_emu10k1 *emu) 589 { 590 unsigned int hc_value; 591 592 /* Set up the initial settings */ 593 emu->ecard_ctrl = EC_RAW_RUN_MODE | 594 EC_SPDIF0_SELECT(EC_DEFAULT_SPDIF0_SEL) | 595 EC_SPDIF1_SELECT(EC_DEFAULT_SPDIF1_SEL); 596 597 /* Step 0: Set the codec type in the hardware control register 598 * and enable audio output */ 599 hc_value = inl(emu->port + HCFG); 600 outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG); 601 inl(emu->port + HCFG); 602 603 /* Step 1: Turn off the led and deassert TRIM_CS */ 604 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN); 605 606 /* Step 2: Calibrate the ADC and DAC */ 607 snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN); 608 609 /* Step 3: Wait for awhile; XXX We can't get away with this 610 * under a real operating system; we'll need to block and wait that 611 * way. */ 612 snd_emu10k1_wait(emu, 48000); 613 614 /* Step 4: Switch off the DAC and ADC calibration. Note 615 * That ADC_CAL is actually an inverted signal, so we assert 616 * it here to stop calibration. */ 617 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN); 618 619 /* Step 4: Switch into run mode */ 620 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); 621 622 /* Step 5: Set the analog input gain */ 623 snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN); 624 625 return 0; 626 } 627 628 static int snd_emu10k1_cardbus_init(struct snd_emu10k1 *emu) 629 { 630 unsigned long special_port; 631 __always_unused unsigned int value; 632 633 /* Special initialisation routine 634 * before the rest of the IO-Ports become active. 635 */ 636 special_port = emu->port + 0x38; 637 value = inl(special_port); 638 outl(0x00d00000, special_port); 639 value = inl(special_port); 640 outl(0x00d00001, special_port); 641 value = inl(special_port); 642 outl(0x00d0005f, special_port); 643 value = inl(special_port); 644 outl(0x00d0007f, special_port); 645 value = inl(special_port); 646 outl(0x0090007f, special_port); 647 value = inl(special_port); 648 649 snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */ 650 /* Delay to give time for ADC chip to switch on. It needs 113ms */ 651 msleep(200); 652 return 0; 653 } 654 655 static int snd_emu1010_load_firmware_entry(struct snd_emu10k1 *emu, 656 const struct firmware *fw_entry) 657 { 658 int n, i; 659 u16 reg; 660 u8 value; 661 __always_unused u16 write_post; 662 663 if (!fw_entry) 664 return -EIO; 665 666 /* The FPGA is a Xilinx Spartan IIE XC2S50E */ 667 /* On E-MU 0404b it is a Xilinx Spartan III XC3S50 */ 668 /* GPIO7 -> FPGA PGMN 669 * GPIO6 -> FPGA CCLK 670 * GPIO5 -> FPGA DIN 671 * FPGA CONFIG OFF -> FPGA PGMN 672 */ 673 spin_lock_irq(&emu->emu_lock); 674 outw(0x00, emu->port + A_GPIO); /* Set PGMN low for 100uS. */ 675 write_post = inw(emu->port + A_GPIO); 676 udelay(100); 677 outw(0x80, emu->port + A_GPIO); /* Leave bit 7 set during netlist setup. */ 678 write_post = inw(emu->port + A_GPIO); 679 udelay(100); /* Allow FPGA memory to clean */ 680 for (n = 0; n < fw_entry->size; n++) { 681 value = fw_entry->data[n]; 682 for (i = 0; i < 8; i++) { 683 reg = 0x80; 684 if (value & 0x1) 685 reg = reg | 0x20; 686 value = value >> 1; 687 outw(reg, emu->port + A_GPIO); 688 write_post = inw(emu->port + A_GPIO); 689 outw(reg | 0x40, emu->port + A_GPIO); 690 write_post = inw(emu->port + A_GPIO); 691 } 692 } 693 /* After programming, set GPIO bit 4 high again. */ 694 outw(0x10, emu->port + A_GPIO); 695 write_post = inw(emu->port + A_GPIO); 696 spin_unlock_irq(&emu->emu_lock); 697 698 return 0; 699 } 700 701 /* firmware file names, per model, init-fw and dock-fw (optional) */ 702 static const char * const firmware_names[5][2] = { 703 [EMU_MODEL_EMU1010] = { 704 HANA_FILENAME, DOCK_FILENAME 705 }, 706 [EMU_MODEL_EMU1010B] = { 707 EMU1010B_FILENAME, MICRO_DOCK_FILENAME 708 }, 709 [EMU_MODEL_EMU1616] = { 710 EMU1010_NOTEBOOK_FILENAME, MICRO_DOCK_FILENAME 711 }, 712 [EMU_MODEL_EMU0404] = { 713 EMU0404_FILENAME, NULL 714 }, 715 }; 716 717 static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock, 718 const struct firmware **fw) 719 { 720 const char *filename; 721 int err; 722 723 if (!*fw) { 724 filename = firmware_names[emu->card_capabilities->emu_model][dock]; 725 if (!filename) 726 return 0; 727 err = request_firmware(fw, filename, &emu->pci->dev); 728 if (err) 729 return err; 730 } 731 732 return snd_emu1010_load_firmware_entry(emu, *fw); 733 } 734 735 static void snd_emu1010_load_dock_firmware(struct snd_emu10k1 *emu) 736 { 737 u32 tmp, tmp2; 738 int err; 739 740 dev_info(emu->card->dev, "emu1010: Loading Audio Dock Firmware\n"); 741 /* Return to Audio Dock programming mode */ 742 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 743 EMU_HANA_FPGA_CONFIG_AUDIODOCK); 744 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw); 745 if (err < 0) 746 return; 747 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0); 748 749 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp); 750 dev_dbg(emu->card->dev, "emu1010: EMU_HANA+DOCK_ID = 0x%x\n", tmp); 751 if ((tmp & 0x1f) != 0x15) { 752 /* FPGA failed to be programmed */ 753 dev_err(emu->card->dev, 754 "emu1010: Loading Audio Dock Firmware failed, reg = 0x%x\n", 755 tmp); 756 return; 757 } 758 dev_info(emu->card->dev, "emu1010: Audio Dock Firmware loaded\n"); 759 760 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp); 761 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2); 762 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2); 763 764 /* Allow DLL to settle, to sync clocking between 1010 and Dock */ 765 msleep(10); 766 } 767 768 static void emu1010_firmware_work(struct work_struct *work) 769 { 770 struct snd_emu10k1 *emu; 771 u32 reg; 772 773 emu = container_of(work, struct snd_emu10k1, 774 emu1010.firmware_work); 775 if (emu->card->shutdown) 776 return; 777 #ifdef CONFIG_PM_SLEEP 778 if (emu->suspend) 779 return; 780 #endif 781 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); /* OPTIONS: Which cards are attached to the EMU */ 782 if (reg & EMU_HANA_OPTION_DOCK_OFFLINE) { 783 /* Audio Dock attached */ 784 snd_emu1010_load_dock_firmware(emu); 785 /* Unmute all. Default is muted after a firmware load */ 786 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); 787 } else if (!(reg & EMU_HANA_OPTION_DOCK_ONLINE)) { 788 /* Audio Dock removed */ 789 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n"); 790 /* The hardware auto-mutes all, so we unmute again */ 791 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); 792 } 793 } 794 795 static void emu1010_clock_work(struct work_struct *work) 796 { 797 struct snd_emu10k1 *emu; 798 struct snd_ctl_elem_id id; 799 800 emu = container_of(work, struct snd_emu10k1, 801 emu1010.clock_work); 802 if (emu->card->shutdown) 803 return; 804 #ifdef CONFIG_PM_SLEEP 805 if (emu->suspend) 806 return; 807 #endif 808 809 spin_lock_irq(&emu->reg_lock); 810 // This is the only thing that can actually happen. 811 emu->emu1010.clock_source = emu->emu1010.clock_fallback; 812 emu->emu1010.wclock = 1 - emu->emu1010.clock_source; 813 snd_emu1010_update_clock(emu); 814 spin_unlock_irq(&emu->reg_lock); 815 snd_ctl_build_ioff(&id, emu->ctl_clock_source, 0); 816 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE, &id); 817 } 818 819 static void emu1010_interrupt(struct snd_emu10k1 *emu) 820 { 821 u32 sts; 822 823 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &sts); 824 825 // The distinction of the IRQ status bits is unreliable, 826 // so we dispatch later based on option card status. 827 if (sts & (EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST)) 828 schedule_work(&emu->emu1010.firmware_work); 829 830 if (sts & EMU_HANA_IRQ_WCLK_CHANGED) 831 schedule_work(&emu->emu1010.clock_work); 832 } 833 834 /* 835 * Current status of the driver: 836 * ---------------------------- 837 * * only 44.1/48kHz supported (the MS Win driver supports up to 192 kHz) 838 * * PCM device nb. 2: 839 * 16 x 16-bit playback - snd_emu10k1_fx8010_playback_ops 840 * 16 x 32-bit capture - snd_emu10k1_capture_efx_ops 841 */ 842 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu) 843 { 844 u32 tmp, tmp2, reg; 845 int err; 846 847 dev_info(emu->card->dev, "emu1010: Special config.\n"); 848 849 /* Mute, and disable audio and lock cache, just in case. 850 * Proper init follows in snd_emu10k1_init(). */ 851 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); 852 853 /* Disable 48Volt power to Audio Dock */ 854 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0); 855 856 /* ID, should read & 0x7f = 0x55. (Bit 7 is the IRQ bit) */ 857 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); 858 dev_dbg(emu->card->dev, "reg1 = 0x%x\n", reg); 859 if ((reg & 0x3f) == 0x15) { 860 /* FPGA netlist already present so clear it */ 861 /* Return to programming mode */ 862 863 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_HANA); 864 } 865 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); 866 dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg); 867 if ((reg & 0x3f) == 0x15) { 868 /* FPGA failed to return to programming mode */ 869 dev_info(emu->card->dev, 870 "emu1010: FPGA failed to return to programming mode\n"); 871 return -ENODEV; 872 } 873 dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg); 874 875 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware); 876 if (err < 0) { 877 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n"); 878 return err; 879 } 880 881 /* ID, should read & 0x7f = 0x55 when FPGA programmed. */ 882 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); 883 if ((reg & 0x3f) != 0x15) { 884 /* FPGA failed to be programmed */ 885 dev_info(emu->card->dev, 886 "emu1010: Loading Hana Firmware file failed, reg = 0x%x\n", 887 reg); 888 return -ENODEV; 889 } 890 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); 895 /* Enable 48Volt power to Audio Dock */ 896 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON); 897 898 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); 899 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg); 900 if (reg & EMU_HANA_OPTION_DOCK_OFFLINE) 901 snd_emu1010_load_dock_firmware(emu); 902 if (emu->card_capabilities->no_adat) { 903 emu->emu1010.optical_in = 0; /* IN_SPDIF */ 904 emu->emu1010.optical_out = 0; /* OUT_SPDIF */ 905 } else { 906 /* Optical -> ADAT I/O */ 907 emu->emu1010.optical_in = 1; /* IN_ADAT */ 908 emu->emu1010.optical_out = 1; /* OUT_ADAT */ 909 } 910 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) | 911 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF); 912 snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp); 913 /* Set no attenuation on Audio Dock pads. */ 914 emu->emu1010.adc_pads = 0x00; 915 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, emu->emu1010.adc_pads); 916 /* Unmute Audio dock DACs, Headphone source DAC-4. */ 917 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, EMU_HANA_DOCK_PHONES_192_DAC4); 918 /* DAC PADs. */ 919 emu->emu1010.dac_pads = EMU_HANA_DOCK_DAC_PAD1 | EMU_HANA_DOCK_DAC_PAD2 | 920 EMU_HANA_DOCK_DAC_PAD3 | EMU_HANA_DOCK_DAC_PAD4; 921 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, emu->emu1010.dac_pads); 922 /* SPDIF Format. Set Consumer mode, 24bit, copy enable */ 923 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, EMU_HANA_SPDIF_MODE_RX_INVALID); 924 /* MIDI routing */ 925 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, EMU_HANA_MIDI_INA_FROM_HAMOA | EMU_HANA_MIDI_INB_FROM_DOCK2); 926 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, EMU_HANA_MIDI_OUT_DOCK2 | EMU_HANA_MIDI_OUT_SYNC2); 927 928 emu->gpio_interrupt = emu1010_interrupt; 929 // Note: The Audigy INTE is set later 930 snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 931 EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST | EMU_HANA_IRQ_WCLK_CHANGED); 932 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, ®); // Clear pending IRQs 933 934 emu->emu1010.clock_source = 1; /* 48000 */ 935 emu->emu1010.clock_fallback = 1; /* 48000 */ 936 /* Default WCLK set to 48kHz. */ 937 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K); 938 /* Word Clock source, Internal 48kHz x1 */ 939 emu->emu1010.wclock = EMU_HANA_WCLOCK_INT_48K; 940 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K); 941 /* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */ 942 snd_emu1010_update_clock(emu); 943 944 // The routes are all set to EMU_SRC_SILENCE due to the reset, 945 // so it is safe to simply enable the outputs. 946 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); 947 948 return 0; 949 } 950 /* 951 * Create the EMU10K1 instance 952 */ 953 954 #ifdef CONFIG_PM_SLEEP 955 static int alloc_pm_buffer(struct snd_emu10k1 *emu); 956 static void free_pm_buffer(struct snd_emu10k1 *emu); 957 #endif 958 959 static void snd_emu10k1_free(struct snd_card *card) 960 { 961 struct snd_emu10k1 *emu = card->private_data; 962 963 if (emu->port) { /* avoid access to already used hardware */ 964 snd_emu10k1_fx8010_tram_setup(emu, 0); 965 snd_emu10k1_done(emu); 966 snd_emu10k1_free_efx(emu); 967 } 968 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) { 969 /* Disable 48Volt power to Audio Dock */ 970 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0); 971 } 972 cancel_work_sync(&emu->emu1010.firmware_work); 973 cancel_work_sync(&emu->emu1010.clock_work); 974 release_firmware(emu->firmware); 975 release_firmware(emu->dock_fw); 976 snd_util_memhdr_free(emu->memhdr); 977 if (emu->silent_page.area) 978 snd_dma_free_pages(&emu->silent_page); 979 if (emu->ptb_pages.area) 980 snd_dma_free_pages(&emu->ptb_pages); 981 vfree(emu->page_ptr_table); 982 vfree(emu->page_addr_table); 983 #ifdef CONFIG_PM_SLEEP 984 free_pm_buffer(emu); 985 #endif 986 } 987 988 static const struct snd_emu_chip_details emu_chip_details[] = { 989 /* Audigy 5/Rx SB1550 */ 990 /* Tested by michael@gernoth.net 28 Mar 2015 */ 991 /* DSP: CA10300-IAT LF 992 * DAC: Cirrus Logic CS4382-KQZ 993 * ADC: Philips 1361T 994 * AC97: Sigmatel STAC9750 995 * CA0151: None 996 */ 997 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10241102, 998 .driver = "Audigy2", .name = "SB Audigy 5/Rx [SB1550]", 999 .id = "Audigy2", 1000 .emu10k2_chip = 1, 1001 .ca0108_chip = 1, 1002 .spk71 = 1, 1003 .adc_1361t = 1, /* 24 bit capture instead of 16bit */ 1004 .ac97_chip = 1}, 1005 /* Audigy4 (Not PRO) SB0610 */ 1006 /* Tested by James@superbug.co.uk 4th April 2006 */ 1007 /* A_IOCFG bits 1008 * Output 1009 * 0: ? 1010 * 1: ? 1011 * 2: ? 1012 * 3: 0 - Digital Out, 1 - Line in 1013 * 4: ? 1014 * 5: ? 1015 * 6: ? 1016 * 7: ? 1017 * Input 1018 * 8: ? 1019 * 9: ? 1020 * A: Green jack sense (Front) 1021 * B: ? 1022 * C: Black jack sense (Rear/Side Right) 1023 * D: Yellow jack sense (Center/LFE/Side Left) 1024 * E: ? 1025 * F: ? 1026 * 1027 * Digital Out/Line in switch using A_IOCFG bit 3 (0x08) 1028 * 0 - Digital Out 1029 * 1 - Line in 1030 */ 1031 /* Mic input not tested. 1032 * Analog CD input not tested 1033 * Digital Out not tested. 1034 * Line in working. 1035 * Audio output 5.1 working. Side outputs not working. 1036 */ 1037 /* DSP: CA10300-IAT LF 1038 * DAC: Cirrus Logic CS4382-KQZ 1039 * ADC: Philips 1361T 1040 * AC97: Sigmatel STAC9750 1041 * CA0151: None 1042 */ 1043 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102, 1044 .driver = "Audigy2", .name = "SB Audigy 4 [SB0610]", 1045 .id = "Audigy2", 1046 .emu10k2_chip = 1, 1047 .ca0108_chip = 1, 1048 .spk71 = 1, 1049 .adc_1361t = 1, /* 24 bit capture instead of 16bit */ 1050 .ac97_chip = 1} , 1051 /* Audigy 2 Value AC3 out does not work yet. 1052 * Need to find out how to turn off interpolators. 1053 */ 1054 /* Tested by James@superbug.co.uk 3rd July 2005 */ 1055 /* DSP: CA0108-IAT 1056 * DAC: CS4382-KQ 1057 * ADC: Philips 1361T 1058 * AC97: STAC9750 1059 * CA0151: None 1060 */ 1061 /* 1062 * A_IOCFG Input (GPIO) 1063 * 0x400 = Front analog jack plugged in. (Green socket) 1064 * 0x1000 = Rear analog jack plugged in. (Black socket) 1065 * 0x2000 = Center/LFE analog jack plugged in. (Orange socket) 1066 * A_IOCFG Output (GPIO) 1067 * 0x60 = Sound out of front Left. 1068 * Win sets it to 0xXX61 1069 */ 1070 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102, 1071 .driver = "Audigy2", .name = "SB Audigy 2 Value [SB0400]", 1072 .id = "Audigy2", 1073 .emu10k2_chip = 1, 1074 .ca0108_chip = 1, 1075 .spk71 = 1, 1076 .ac97_chip = 1} , 1077 /* Audigy 2 ZS Notebook Cardbus card.*/ 1078 /* Tested by James@superbug.co.uk 6th November 2006 */ 1079 /* Audio output 7.1/Headphones working. 1080 * Digital output working. (AC3 not checked, only PCM) 1081 * Audio Mic/Line inputs working. 1082 * Digital input not tested. 1083 */ 1084 /* DSP: Tina2 1085 * DAC: Wolfson WM8768/WM8568 1086 * ADC: Wolfson WM8775 1087 * AC97: None 1088 * CA0151: None 1089 */ 1090 /* Tested by James@superbug.co.uk 4th April 2006 */ 1091 /* A_IOCFG bits 1092 * Output 1093 * 0: Not Used 1094 * 1: 0 = Mute all the 7.1 channel out. 1 = unmute. 1095 * 2: Analog input 0 = line in, 1 = mic in 1096 * 3: Not Used 1097 * 4: Digital output 0 = off, 1 = on. 1098 * 5: Not Used 1099 * 6: Not Used 1100 * 7: Not Used 1101 * Input 1102 * All bits 1 (0x3fxx) means nothing plugged in. 1103 * 8-9: 0 = Line in/Mic, 2 = Optical in, 3 = Nothing. 1104 * A-B: 0 = Headphones, 2 = Optical out, 3 = Nothing. 1105 * C-D: 2 = Front/Rear/etc, 3 = nothing. 1106 * E-F: Always 0 1107 * 1108 */ 1109 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102, 1110 .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]", 1111 .id = "Audigy2", 1112 .emu10k2_chip = 1, 1113 .ca0108_chip = 1, 1114 .ca_cardbus_chip = 1, 1115 .spi_dac = 1, 1116 .i2c_adc = 1, 1117 .spk71 = 1} , 1118 /* This is MAEM8950 "Mana" */ 1119 /* Attach MicroDock[M] to make it an E-MU 1616[m]. */ 1120 /* Does NOT support sync daughter card (obviously). */ 1121 /* Tested by James@superbug.co.uk 4th Nov 2007. */ 1122 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102, 1123 .driver = "Audigy2", .name = "E-MU 02 CardBus [MAEM8950]", 1124 .id = "EMU1010", 1125 .emu10k2_chip = 1, 1126 .ca0108_chip = 1, 1127 .ca_cardbus_chip = 1, 1128 .spk71 = 1 , 1129 .emu_model = EMU_MODEL_EMU1616}, 1130 /* Tested by James@superbug.co.uk 4th Nov 2007. */ 1131 /* This is MAEM8960 "Hana3", 0202 is MAEM8980 */ 1132 /* Attach 0202 daughter card to make it an E-MU 1212m, OR a 1133 * MicroDock[M] to make it an E-MU 1616[m]. */ 1134 /* Does NOT support sync daughter card. */ 1135 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102, 1136 .driver = "Audigy2", .name = "E-MU 1010b PCI [MAEM8960]", 1137 .id = "EMU1010", 1138 .emu10k2_chip = 1, 1139 .ca0108_chip = 1, 1140 .spk71 = 1, 1141 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 new revision */ 1142 /* Tested by Maxim Kachur <mcdebugger@duganet.ru> 17th Oct 2012. */ 1143 /* This is MAEM8986, 0202 is MAEM8980 */ 1144 /* Attach 0202 daughter card to make it an E-MU 1212m, OR a 1145 * MicroDockM to make it an E-MU 1616m. The non-m 1146 * version was never sold with this card, but should 1147 * still work. */ 1148 /* Does NOT support sync daughter card. */ 1149 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40071102, 1150 .driver = "Audigy2", .name = "E-MU 1010 PCIe [MAEM8986]", 1151 .id = "EMU1010", 1152 .emu10k2_chip = 1, 1153 .ca0108_chip = 1, 1154 .spk71 = 1, 1155 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 PCIe */ 1156 /* Tested by James@superbug.co.uk 8th July 2005. */ 1157 /* This is MAEM8810 "Hana", 0202 is MAEM8820 "Hamoa" */ 1158 /* Attach 0202 daughter card to make it an E-MU 1212m, OR an 1159 * AudioDock[M] to make it an E-MU 1820[m]. */ 1160 /* Supports sync daughter card. */ 1161 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102, 1162 .driver = "Audigy2", .name = "E-MU 1010 [MAEM8810]", 1163 .id = "EMU1010", 1164 .emu10k2_chip = 1, 1165 .ca0102_chip = 1, 1166 .spk71 = 1, 1167 .emu_model = EMU_MODEL_EMU1010}, /* EMU 1010 old revision */ 1168 /* This is MAEM8852 "HanaLiteLite" */ 1169 /* Supports sync daughter card. */ 1170 /* Tested by oswald.buddenhagen@gmx.de Mar 2023. */ 1171 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40021102, 1172 .driver = "Audigy2", .name = "E-MU 0404b PCI [MAEM8852]", 1173 .id = "EMU0404", 1174 .emu10k2_chip = 1, 1175 .ca0108_chip = 1, 1176 .spk20 = 1, 1177 .no_adat = 1, 1178 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 new revision */ 1179 /* This is MAEM8850 "HanaLite" */ 1180 /* Supports sync daughter card. */ 1181 /* Tested by James@superbug.co.uk 20-3-2007. */ 1182 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40021102, 1183 .driver = "Audigy2", .name = "E-MU 0404 [MAEM8850]", 1184 .id = "EMU0404", 1185 .emu10k2_chip = 1, 1186 .ca0102_chip = 1, 1187 .spk20 = 1, 1188 .no_adat = 1, 1189 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 */ 1190 /* EMU0404 PCIe */ 1191 /* Does NOT support sync daughter card. */ 1192 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40051102, 1193 .driver = "Audigy2", .name = "E-MU 0404 PCIe [MAEM8984]", 1194 .id = "EMU0404", 1195 .emu10k2_chip = 1, 1196 .ca0108_chip = 1, 1197 .spk20 = 1, 1198 .no_adat = 1, 1199 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 PCIe ver_03 */ 1200 {.vendor = 0x1102, .device = 0x0008, 1201 .driver = "Audigy2", .name = "SB Audigy 2 Value [Unknown]", 1202 .id = "Audigy2", 1203 .emu10k2_chip = 1, 1204 .ca0108_chip = 1, 1205 .ac97_chip = 1} , 1206 /* Tested by James@superbug.co.uk 3rd July 2005 */ 1207 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, 1208 .driver = "Audigy2", .name = "SB Audigy 4 PRO [SB0380]", 1209 .id = "Audigy2", 1210 .emu10k2_chip = 1, 1211 .ca0102_chip = 1, 1212 .ca0151_chip = 1, 1213 .spk71 = 1, 1214 .spdif_bug = 1, 1215 .ac97_chip = 1} , 1216 /* Tested by shane-alsa@cm.nu 5th Nov 2005 */ 1217 /* The 0x20061102 does have SB0350 written on it 1218 * Just like 0x20021102 1219 */ 1220 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102, 1221 .driver = "Audigy2", .name = "SB Audigy 2 [SB0350b]", 1222 .id = "Audigy2", 1223 .emu10k2_chip = 1, 1224 .ca0102_chip = 1, 1225 .ca0151_chip = 1, 1226 .spk71 = 1, 1227 .spdif_bug = 1, 1228 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1229 .ac97_chip = 1} , 1230 /* 0x20051102 also has SB0350 written on it, treated as Audigy 2 ZS by 1231 Creative's Windows driver */ 1232 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20051102, 1233 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350a]", 1234 .id = "Audigy2", 1235 .emu10k2_chip = 1, 1236 .ca0102_chip = 1, 1237 .ca0151_chip = 1, 1238 .spk71 = 1, 1239 .spdif_bug = 1, 1240 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1241 .ac97_chip = 1} , 1242 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102, 1243 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350]", 1244 .id = "Audigy2", 1245 .emu10k2_chip = 1, 1246 .ca0102_chip = 1, 1247 .ca0151_chip = 1, 1248 .spk71 = 1, 1249 .spdif_bug = 1, 1250 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1251 .ac97_chip = 1} , 1252 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102, 1253 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0360]", 1254 .id = "Audigy2", 1255 .emu10k2_chip = 1, 1256 .ca0102_chip = 1, 1257 .ca0151_chip = 1, 1258 .spk71 = 1, 1259 .spdif_bug = 1, 1260 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1261 .ac97_chip = 1} , 1262 /* Audigy 2 */ 1263 /* Tested by James@superbug.co.uk 3rd July 2005 */ 1264 /* DSP: CA0102-IAT 1265 * DAC: CS4382-KQ 1266 * ADC: Philips 1361T 1267 * AC97: STAC9721 1268 * CA0151: Yes 1269 */ 1270 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102, 1271 .driver = "Audigy2", .name = "SB Audigy 2 [SB0240]", 1272 .id = "Audigy2", 1273 .emu10k2_chip = 1, 1274 .ca0102_chip = 1, 1275 .ca0151_chip = 1, 1276 .spk71 = 1, 1277 .spdif_bug = 1, 1278 .adc_1361t = 1, /* 24 bit capture instead of 16bit */ 1279 .ac97_chip = 1} , 1280 /* Audigy 2 Platinum EX */ 1281 /* Win driver sets A_IOCFG output to 0x1c00 */ 1282 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102, 1283 .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]", 1284 .id = "Audigy2", 1285 .emu10k2_chip = 1, 1286 .ca0102_chip = 1, 1287 .ca0151_chip = 1, 1288 .spk71 = 1, 1289 .spdif_bug = 1} , 1290 /* Dell OEM/Creative Labs Audigy 2 ZS */ 1291 /* See ALSA bug#1365 */ 1292 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102, 1293 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0353]", 1294 .id = "Audigy2", 1295 .emu10k2_chip = 1, 1296 .ca0102_chip = 1, 1297 .ca0151_chip = 1, 1298 .spk71 = 1, 1299 .spdif_bug = 1, 1300 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1301 .ac97_chip = 1} , 1302 /* Audigy 2 Platinum */ 1303 /* Win driver sets A_IOCFG output to 0xa00 */ 1304 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, 1305 .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]", 1306 .id = "Audigy2", 1307 .emu10k2_chip = 1, 1308 .ca0102_chip = 1, 1309 .ca0151_chip = 1, 1310 .spk71 = 1, 1311 .spdif_bug = 1, 1312 .invert_shared_spdif = 1, /* digital/analog switch swapped */ 1313 .adc_1361t = 1, /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */ 1314 .ac97_chip = 1} , 1315 {.vendor = 0x1102, .device = 0x0004, .revision = 0x04, 1316 .driver = "Audigy2", .name = "SB Audigy 2 [Unknown]", 1317 .id = "Audigy2", 1318 .emu10k2_chip = 1, 1319 .ca0102_chip = 1, 1320 .ca0151_chip = 1, 1321 .spdif_bug = 1, 1322 .ac97_chip = 1} , 1323 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102, 1324 .driver = "Audigy", .name = "SB Audigy 1 [SB0092]", 1325 .id = "Audigy", 1326 .emu10k2_chip = 1, 1327 .ca0102_chip = 1, 1328 .ac97_chip = 1} , 1329 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102, 1330 .driver = "Audigy", .name = "SB Audigy 1 ES [SB0160]", 1331 .id = "Audigy", 1332 .emu10k2_chip = 1, 1333 .ca0102_chip = 1, 1334 .spdif_bug = 1, 1335 .ac97_chip = 1} , 1336 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102, 1337 .driver = "Audigy", .name = "SB Audigy 1 [SB0090]", 1338 .id = "Audigy", 1339 .emu10k2_chip = 1, 1340 .ca0102_chip = 1, 1341 .ac97_chip = 1} , 1342 {.vendor = 0x1102, .device = 0x0004, 1343 .driver = "Audigy", .name = "Audigy 1 [Unknown]", 1344 .id = "Audigy", 1345 .emu10k2_chip = 1, 1346 .ca0102_chip = 1, 1347 .ac97_chip = 1} , 1348 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102, 1349 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]", 1350 .id = "Live", 1351 .emu10k1_chip = 1, 1352 .ac97_chip = 1, 1353 .sblive51 = 1} , 1354 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806b1102, 1355 .driver = "EMU10K1", .name = "SB Live! [SB0105]", 1356 .id = "Live", 1357 .emu10k1_chip = 1, 1358 .ac97_chip = 1, 1359 .sblive51 = 1} , 1360 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806a1102, 1361 .driver = "EMU10K1", .name = "SB Live! Value [SB0103]", 1362 .id = "Live", 1363 .emu10k1_chip = 1, 1364 .ac97_chip = 1, 1365 .sblive51 = 1} , 1366 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102, 1367 .driver = "EMU10K1", .name = "SB Live! Value [SB0101]", 1368 .id = "Live", 1369 .emu10k1_chip = 1, 1370 .ac97_chip = 1, 1371 .sblive51 = 1} , 1372 /* Tested by ALSA bug#1680 26th December 2005 */ 1373 /* note: It really has SB0220 written on the card, */ 1374 /* but it's SB0228 according to kx.inf */ 1375 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102, 1376 .driver = "EMU10K1", .name = "SB Live! 5.1 Dell OEM [SB0228]", 1377 .id = "Live", 1378 .emu10k1_chip = 1, 1379 .ac97_chip = 1, 1380 .sblive51 = 1} , 1381 /* Tested by Thomas Zehetbauer 27th Aug 2005 */ 1382 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102, 1383 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]", 1384 .id = "Live", 1385 .emu10k1_chip = 1, 1386 .ac97_chip = 1, 1387 .sblive51 = 1} , 1388 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102, 1389 .driver = "EMU10K1", .name = "SB Live! 5.1", 1390 .id = "Live", 1391 .emu10k1_chip = 1, 1392 .ac97_chip = 1, 1393 .sblive51 = 1} , 1394 /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */ 1395 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, 1396 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0060]", 1397 .id = "Live", 1398 .emu10k1_chip = 1, 1399 .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum 1400 * share the same IDs! 1401 */ 1402 .sblive51 = 1} , 1403 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, 1404 .driver = "EMU10K1", .name = "SB Live! Value [CT4850]", 1405 .id = "Live", 1406 .emu10k1_chip = 1, 1407 .ac97_chip = 1, 1408 .sblive51 = 1} , 1409 /* SB Live! Platinum */ 1410 /* Win driver sets A_IOCFG output to 0 */ 1411 /* Tested by Jonathan Dowland <jon@dow.land> Apr 2023. */ 1412 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102, 1413 .driver = "EMU10K1", .name = "SB Live! Platinum [CT4760P]", 1414 .id = "Live", 1415 .emu10k1_chip = 1, 1416 .ac97_chip = 1} , 1417 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102, 1418 .driver = "EMU10K1", .name = "SB Live! Value [CT4871]", 1419 .id = "Live", 1420 .emu10k1_chip = 1, 1421 .ac97_chip = 1, 1422 .sblive51 = 1} , 1423 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102, 1424 .driver = "EMU10K1", .name = "SB Live! Value [CT4831]", 1425 .id = "Live", 1426 .emu10k1_chip = 1, 1427 .ac97_chip = 1, 1428 .sblive51 = 1} , 1429 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102, 1430 .driver = "EMU10K1", .name = "SB Live! Value [CT4870]", 1431 .id = "Live", 1432 .emu10k1_chip = 1, 1433 .ac97_chip = 1, 1434 .sblive51 = 1} , 1435 /* Tested by James@superbug.co.uk 3rd July 2005 */ 1436 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102, 1437 .driver = "EMU10K1", .name = "SB Live! Value [CT4832]", 1438 .id = "Live", 1439 .emu10k1_chip = 1, 1440 .ac97_chip = 1, 1441 .sblive51 = 1} , 1442 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102, 1443 .driver = "EMU10K1", .name = "SB Live! Value [CT4830]", 1444 .id = "Live", 1445 .emu10k1_chip = 1, 1446 .ac97_chip = 1, 1447 .sblive51 = 1} , 1448 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102, 1449 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]", 1450 .id = "Live", 1451 .emu10k1_chip = 1, 1452 .ac97_chip = 1, 1453 .sblive51 = 1} , 1454 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102, 1455 .driver = "EMU10K1", .name = "SB Live! Value [CT4780]", 1456 .id = "Live", 1457 .emu10k1_chip = 1, 1458 .ac97_chip = 1, 1459 .sblive51 = 1} , 1460 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102, 1461 .driver = "EMU10K1", .name = "E-MU APS [PC545]", 1462 .id = "APS", 1463 .emu10k1_chip = 1, 1464 .ecard = 1} , 1465 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102, 1466 .driver = "EMU10K1", .name = "SB Live! [CT4620]", 1467 .id = "Live", 1468 .emu10k1_chip = 1, 1469 .ac97_chip = 1, 1470 .sblive51 = 1} , 1471 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102, 1472 .driver = "EMU10K1", .name = "SB Live! Value [CT4670]", 1473 .id = "Live", 1474 .emu10k1_chip = 1, 1475 .ac97_chip = 1, 1476 .sblive51 = 1} , 1477 {.vendor = 0x1102, .device = 0x0002, 1478 .driver = "EMU10K1", .name = "SB Live! [Unknown]", 1479 .id = "Live", 1480 .emu10k1_chip = 1, 1481 .ac97_chip = 1, 1482 .sblive51 = 1} , 1483 { } /* terminator */ 1484 }; 1485 1486 /* 1487 * The chip (at least the Audigy 2 CA0102 chip, but most likely others, too) 1488 * has a problem that from time to time it likes to do few DMA reads a bit 1489 * beyond its normal allocation and gets very confused if these reads get 1490 * blocked by a IOMMU. 1491 * 1492 * This behaviour has been observed for the first (reserved) page 1493 * (for which it happens multiple times at every playback), often for various 1494 * synth pages and sometimes for PCM playback buffers and the page table 1495 * memory itself. 1496 * 1497 * As a workaround let's widen these DMA allocations by an extra page if we 1498 * detect that the device is behind a non-passthrough IOMMU. 1499 */ 1500 static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu) 1501 { 1502 struct iommu_domain *domain; 1503 1504 emu->iommu_workaround = false; 1505 1506 domain = iommu_get_domain_for_dev(emu->card->dev); 1507 if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY) 1508 return; 1509 1510 dev_notice(emu->card->dev, 1511 "non-passthrough IOMMU detected, widening DMA allocations"); 1512 emu->iommu_workaround = true; 1513 } 1514 1515 int snd_emu10k1_create(struct snd_card *card, 1516 struct pci_dev *pci, 1517 unsigned short extin_mask, 1518 unsigned short extout_mask, 1519 long max_cache_bytes, 1520 int enable_ir, 1521 uint subsystem) 1522 { 1523 struct snd_emu10k1 *emu = card->private_data; 1524 int idx, err; 1525 int is_audigy; 1526 size_t page_table_size; 1527 __le32 *pgtbl; 1528 unsigned int silent_page; 1529 const struct snd_emu_chip_details *c; 1530 1531 /* enable PCI device */ 1532 err = pcim_enable_device(pci); 1533 if (err < 0) 1534 return err; 1535 1536 card->private_free = snd_emu10k1_free; 1537 emu->card = card; 1538 spin_lock_init(&emu->reg_lock); 1539 spin_lock_init(&emu->emu_lock); 1540 spin_lock_init(&emu->spi_lock); 1541 spin_lock_init(&emu->i2c_lock); 1542 spin_lock_init(&emu->voice_lock); 1543 spin_lock_init(&emu->synth_lock); 1544 spin_lock_init(&emu->memblk_lock); 1545 mutex_init(&emu->fx8010.lock); 1546 INIT_LIST_HEAD(&emu->mapped_link_head); 1547 INIT_LIST_HEAD(&emu->mapped_order_link_head); 1548 emu->pci = pci; 1549 emu->irq = -1; 1550 emu->synth = NULL; 1551 emu->get_synth_voice = NULL; 1552 INIT_WORK(&emu->emu1010.firmware_work, emu1010_firmware_work); 1553 INIT_WORK(&emu->emu1010.clock_work, emu1010_clock_work); 1554 /* read revision & serial */ 1555 emu->revision = pci->revision; 1556 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial); 1557 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model); 1558 dev_dbg(card->dev, 1559 "vendor = 0x%x, device = 0x%x, subsystem_vendor_id = 0x%x, subsystem_id = 0x%x\n", 1560 pci->vendor, pci->device, emu->serial, emu->model); 1561 1562 for (c = emu_chip_details; c->vendor; c++) { 1563 if (c->vendor == pci->vendor && c->device == pci->device) { 1564 if (subsystem) { 1565 if (c->subsystem && (c->subsystem == subsystem)) 1566 break; 1567 else 1568 continue; 1569 } else { 1570 if (c->subsystem && (c->subsystem != emu->serial)) 1571 continue; 1572 if (c->revision && c->revision != emu->revision) 1573 continue; 1574 } 1575 break; 1576 } 1577 } 1578 if (c->vendor == 0) { 1579 dev_err(card->dev, "emu10k1: Card not recognised\n"); 1580 return -ENOENT; 1581 } 1582 emu->card_capabilities = c; 1583 if (c->subsystem && !subsystem) 1584 dev_dbg(card->dev, "Sound card name = %s\n", c->name); 1585 else if (subsystem) 1586 dev_dbg(card->dev, "Sound card name = %s, " 1587 "vendor = 0x%x, device = 0x%x, subsystem = 0x%x. " 1588 "Forced to subsystem = 0x%x\n", c->name, 1589 pci->vendor, pci->device, emu->serial, c->subsystem); 1590 else 1591 dev_dbg(card->dev, "Sound card name = %s, " 1592 "vendor = 0x%x, device = 0x%x, subsystem = 0x%x.\n", 1593 c->name, pci->vendor, pci->device, 1594 emu->serial); 1595 1596 if (!*card->id && c->id) 1597 strscpy(card->id, c->id, sizeof(card->id)); 1598 1599 is_audigy = emu->audigy = c->emu10k2_chip; 1600 1601 snd_emu10k1_detect_iommu(emu); 1602 1603 /* set addressing mode */ 1604 emu->address_mode = is_audigy ? 0 : 1; 1605 /* set the DMA transfer mask */ 1606 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK; 1607 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) { 1608 dev_err(card->dev, 1609 "architecture does not support PCI busmaster DMA with mask 0x%lx\n", 1610 emu->dma_mask); 1611 return -ENXIO; 1612 } 1613 if (is_audigy) 1614 emu->gpr_base = A_FXGPREGBASE; 1615 else 1616 emu->gpr_base = FXGPREGBASE; 1617 1618 err = pci_request_regions(pci, "EMU10K1"); 1619 if (err < 0) 1620 return err; 1621 emu->port = pci_resource_start(pci, 0); 1622 1623 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; 1624 1625 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 : 1626 MAXPAGES0); 1627 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size, 1628 &emu->ptb_pages) < 0) 1629 return -ENOMEM; 1630 dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n", 1631 (unsigned long)emu->ptb_pages.addr, 1632 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes)); 1633 1634 emu->page_ptr_table = vmalloc(array_size(sizeof(void *), 1635 emu->max_cache_pages)); 1636 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long), 1637 emu->max_cache_pages)); 1638 if (!emu->page_ptr_table || !emu->page_addr_table) 1639 return -ENOMEM; 1640 1641 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE, 1642 &emu->silent_page) < 0) 1643 return -ENOMEM; 1644 dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n", 1645 (unsigned long)emu->silent_page.addr, 1646 (unsigned long)(emu->silent_page.addr + 1647 emu->silent_page.bytes)); 1648 1649 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE); 1650 if (!emu->memhdr) 1651 return -ENOMEM; 1652 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) - 1653 sizeof(struct snd_util_memblk); 1654 1655 pci_set_master(pci); 1656 1657 // The masks are not used for Audigy. 1658 // FIXME: these should come from the card_capabilites table. 1659 if (extin_mask == 0) 1660 extin_mask = 0x3fcf; // EXTIN_* 1661 if (extout_mask == 0) 1662 extout_mask = 0x7fff; // EXTOUT_* 1663 emu->fx8010.extin_mask = extin_mask; 1664 emu->fx8010.extout_mask = extout_mask; 1665 emu->enable_ir = enable_ir; 1666 1667 if (emu->card_capabilities->ca_cardbus_chip) { 1668 err = snd_emu10k1_cardbus_init(emu); 1669 if (err < 0) 1670 return err; 1671 } 1672 if (emu->card_capabilities->ecard) { 1673 err = snd_emu10k1_ecard_init(emu); 1674 if (err < 0) 1675 return err; 1676 } else if (emu->card_capabilities->emu_model) { 1677 err = snd_emu10k1_emu1010_init(emu); 1678 if (err < 0) 1679 return err; 1680 } else { 1681 /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version 1682 does not support this, it shouldn't do any harm */ 1683 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, 1684 AC97SLOT_CNTR|AC97SLOT_LFE); 1685 } 1686 1687 /* initialize TRAM setup */ 1688 emu->fx8010.itram_size = (16 * 1024)/2; 1689 emu->fx8010.etram_pages.area = NULL; 1690 emu->fx8010.etram_pages.bytes = 0; 1691 1692 /* irq handler must be registered after I/O ports are activated */ 1693 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1_interrupt, 1694 IRQF_SHARED, KBUILD_MODNAME, emu)) 1695 return -EBUSY; 1696 emu->irq = pci->irq; 1697 card->sync_irq = emu->irq; 1698 1699 /* 1700 * Init to 0x02109204 : 1701 * Clock accuracy = 0 (1000ppm) 1702 * Sample Rate = 2 (48kHz) 1703 * Audio Channel = 1 (Left of 2) 1704 * Source Number = 0 (Unspecified) 1705 * Generation Status = 1 (Original for Cat Code 12) 1706 * Cat Code = 12 (Digital Signal Mixer) 1707 * Mode = 0 (Mode 0) 1708 * Emphasis = 0 (None) 1709 * CP = 1 (Copyright unasserted) 1710 * AN = 0 (Audio data) 1711 * P = 0 (Consumer) 1712 */ 1713 emu->spdif_bits[0] = emu->spdif_bits[1] = 1714 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | 1715 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC | 1716 SPCS_GENERATIONSTATUS | 0x00001200 | 1717 0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT; 1718 1719 /* Clear silent pages and set up pointers */ 1720 memset(emu->silent_page.area, 0, emu->silent_page.bytes); 1721 silent_page = emu->silent_page.addr << emu->address_mode; 1722 pgtbl = (__le32 *)emu->ptb_pages.area; 1723 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++) 1724 pgtbl[idx] = cpu_to_le32(silent_page | idx); 1725 1726 /* set up voice indices */ 1727 for (idx = 0; idx < NUM_G; idx++) 1728 emu->voices[idx].number = idx; 1729 1730 err = snd_emu10k1_init(emu, enable_ir); 1731 if (err < 0) 1732 return err; 1733 #ifdef CONFIG_PM_SLEEP 1734 err = alloc_pm_buffer(emu); 1735 if (err < 0) 1736 return err; 1737 #endif 1738 1739 /* Initialize the effect engine */ 1740 err = snd_emu10k1_init_efx(emu); 1741 if (err < 0) 1742 return err; 1743 snd_emu10k1_audio_enable(emu); 1744 1745 #ifdef CONFIG_SND_PROC_FS 1746 snd_emu10k1_proc_init(emu); 1747 #endif 1748 return 0; 1749 } 1750 1751 #ifdef CONFIG_PM_SLEEP 1752 static const unsigned char saved_regs[] = { 1753 CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP, 1754 FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL, 1755 ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2, 1756 TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA, 1757 MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2, 1758 SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX, 1759 0xff /* end */ 1760 }; 1761 static const unsigned char saved_regs_audigy[] = { 1762 A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_EHC, 1763 A_FXRT2, A_SENDAMOUNTS, A_FXRT1, 1764 0xff /* end */ 1765 }; 1766 1767 static int alloc_pm_buffer(struct snd_emu10k1 *emu) 1768 { 1769 int size; 1770 1771 size = ARRAY_SIZE(saved_regs); 1772 if (emu->audigy) 1773 size += ARRAY_SIZE(saved_regs_audigy); 1774 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size)); 1775 if (!emu->saved_ptr) 1776 return -ENOMEM; 1777 if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0) 1778 return -ENOMEM; 1779 if (emu->card_capabilities->ca0151_chip && 1780 snd_p16v_alloc_pm_buffer(emu) < 0) 1781 return -ENOMEM; 1782 return 0; 1783 } 1784 1785 static void free_pm_buffer(struct snd_emu10k1 *emu) 1786 { 1787 vfree(emu->saved_ptr); 1788 snd_emu10k1_efx_free_pm_buffer(emu); 1789 if (emu->card_capabilities->ca0151_chip) 1790 snd_p16v_free_pm_buffer(emu); 1791 } 1792 1793 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu) 1794 { 1795 int i; 1796 const unsigned char *reg; 1797 unsigned int *val; 1798 1799 val = emu->saved_ptr; 1800 for (reg = saved_regs; *reg != 0xff; reg++) 1801 for (i = 0; i < NUM_G; i++, val++) 1802 *val = snd_emu10k1_ptr_read(emu, *reg, i); 1803 if (emu->audigy) { 1804 for (reg = saved_regs_audigy; *reg != 0xff; reg++) 1805 for (i = 0; i < NUM_G; i++, val++) 1806 *val = snd_emu10k1_ptr_read(emu, *reg, i); 1807 } 1808 if (emu->audigy) 1809 emu->saved_a_iocfg = inw(emu->port + A_IOCFG); 1810 emu->saved_hcfg = inl(emu->port + HCFG); 1811 } 1812 1813 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu) 1814 { 1815 if (emu->card_capabilities->ca_cardbus_chip) 1816 snd_emu10k1_cardbus_init(emu); 1817 if (emu->card_capabilities->ecard) 1818 snd_emu10k1_ecard_init(emu); 1819 else if (emu->card_capabilities->emu_model) 1820 snd_emu10k1_emu1010_init(emu); 1821 else 1822 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); 1823 snd_emu10k1_init(emu, emu->enable_ir); 1824 } 1825 1826 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu) 1827 { 1828 int i; 1829 const unsigned char *reg; 1830 unsigned int *val; 1831 1832 snd_emu10k1_audio_enable(emu); 1833 1834 /* resore for spdif */ 1835 if (emu->audigy) 1836 outw(emu->saved_a_iocfg, emu->port + A_IOCFG); 1837 outl(emu->saved_hcfg, emu->port + HCFG); 1838 1839 val = emu->saved_ptr; 1840 for (reg = saved_regs; *reg != 0xff; reg++) 1841 for (i = 0; i < NUM_G; i++, val++) 1842 snd_emu10k1_ptr_write(emu, *reg, i, *val); 1843 if (emu->audigy) { 1844 for (reg = saved_regs_audigy; *reg != 0xff; reg++) 1845 for (i = 0; i < NUM_G; i++, val++) 1846 snd_emu10k1_ptr_write(emu, *reg, i, *val); 1847 } 1848 } 1849 #endif 1850