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
snd_emu10k1_voice_init(struct snd_emu10k1 * emu,int ch)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
snd_emu10k1_init(struct snd_emu10k1 * emu,int enable_ir)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
snd_emu10k1_audio_enable(struct snd_emu10k1 * emu)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
snd_emu10k1_done(struct snd_emu10k1 * emu)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
snd_emu10k1_ecard_write(struct snd_emu10k1 * emu,unsigned int value)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
snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 * emu,unsigned short gain)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
snd_emu10k1_ecard_init(struct snd_emu10k1 * emu)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
snd_emu10k1_cardbus_init(struct snd_emu10k1 * emu)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 /* firmware file names, per model, init-fw and dock-fw (optional) */
656 static const char * const firmware_names[5][2] = {
657 [EMU_MODEL_EMU1010] = {
658 HANA_FILENAME, DOCK_FILENAME
659 },
660 [EMU_MODEL_EMU1010B] = {
661 EMU1010B_FILENAME, MICRO_DOCK_FILENAME
662 },
663 [EMU_MODEL_EMU1616] = {
664 EMU1010_NOTEBOOK_FILENAME, MICRO_DOCK_FILENAME
665 },
666 [EMU_MODEL_EMU0404] = {
667 EMU0404_FILENAME, NULL
668 },
669 };
670
snd_emu1010_load_firmware(struct snd_emu10k1 * emu,int dock,const struct firmware ** fw)671 static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock,
672 const struct firmware **fw)
673 {
674 const char *filename;
675 int err;
676
677 if (!*fw) {
678 filename = firmware_names[emu->card_capabilities->emu_model][dock];
679 if (!filename)
680 return 0;
681 err = request_firmware(fw, filename, &emu->pci->dev);
682 if (err)
683 return err;
684 }
685
686 snd_emu1010_load_firmware_entry(emu, dock, *fw);
687 return 0;
688 }
689
snd_emu1010_load_dock_firmware(struct snd_emu10k1 * emu)690 static void snd_emu1010_load_dock_firmware(struct snd_emu10k1 *emu)
691 {
692 u32 tmp, tmp2;
693 int err;
694
695 // The docking events clearly arrive prematurely - while the
696 // Dock's FPGA seems to be successfully programmed, the Dock
697 // fails to initialize subsequently if we don't give it some
698 // time to "warm up" here.
699 msleep(200);
700
701 dev_info(emu->card->dev, "emu1010: Loading Audio Dock Firmware\n");
702 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw);
703 if (err < 0)
704 return;
705 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0);
706
707 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp);
708 dev_dbg(emu->card->dev, "emu1010: EMU_HANA+DOCK_ID = 0x%x\n", tmp);
709 if ((tmp & 0x1f) != 0x15) {
710 /* FPGA failed to be programmed */
711 dev_err(emu->card->dev,
712 "emu1010: Loading Audio Dock Firmware failed, reg = 0x%x\n",
713 tmp);
714 return;
715 }
716 dev_info(emu->card->dev, "emu1010: Audio Dock Firmware loaded\n");
717
718 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp);
719 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2);
720 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2);
721
722 /* Allow DLL to settle, to sync clocking between 1010 and Dock */
723 msleep(10);
724 }
725
emu1010_dock_event(struct snd_emu10k1 * emu)726 static void emu1010_dock_event(struct snd_emu10k1 *emu)
727 {
728 u32 reg;
729
730 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); /* OPTIONS: Which cards are attached to the EMU */
731 if (reg & EMU_HANA_OPTION_DOCK_OFFLINE) {
732 /* Audio Dock attached */
733 snd_emu1010_load_dock_firmware(emu);
734 /* Unmute all. Default is muted after a firmware load */
735 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
736 } else if (!(reg & EMU_HANA_OPTION_DOCK_ONLINE)) {
737 /* Audio Dock removed */
738 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
739 /* The hardware auto-mutes all, so we unmute again */
740 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
741 }
742 }
743
emu1010_clock_event(struct snd_emu10k1 * emu)744 static void emu1010_clock_event(struct snd_emu10k1 *emu)
745 {
746 struct snd_ctl_elem_id id;
747
748 scoped_guard(spinlock_irq, &emu->reg_lock) {
749 // This is the only thing that can actually happen.
750 emu->emu1010.clock_source = emu->emu1010.clock_fallback;
751 emu->emu1010.wclock = 1 - emu->emu1010.clock_source;
752 snd_emu1010_update_clock(emu);
753 }
754 snd_ctl_build_ioff(&id, emu->ctl_clock_source, 0);
755 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE, &id);
756 }
757
emu1010_work(struct work_struct * work)758 static void emu1010_work(struct work_struct *work)
759 {
760 struct snd_emu10k1 *emu;
761 u32 sts;
762
763 emu = container_of(work, struct snd_emu10k1, emu1010.work);
764 if (emu->card->shutdown)
765 return;
766 #ifdef CONFIG_PM_SLEEP
767 if (emu->suspend)
768 return;
769 #endif
770
771 guard(snd_emu1010_fpga_lock)(emu);
772
773 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &sts);
774
775 // The distinction of the IRQ status bits is unreliable,
776 // so we dispatch later based on option card status.
777 if (sts & (EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST))
778 emu1010_dock_event(emu);
779
780 if (sts & EMU_HANA_IRQ_WCLK_CHANGED)
781 emu1010_clock_event(emu);
782 }
783
emu1010_interrupt(struct snd_emu10k1 * emu)784 static void emu1010_interrupt(struct snd_emu10k1 *emu)
785 {
786 // We get an interrupt on each GPIO input pin change, but we
787 // care only about the ones triggered by the dedicated pin.
788 u16 sts = inw(emu->port + A_GPIO);
789 u16 bit = emu->card_capabilities->ca0108_chip ? 0x2000 : 0x8000;
790 if (!(sts & bit))
791 return;
792
793 schedule_work(&emu->emu1010.work);
794 }
795
796 /*
797 * Current status of the driver:
798 * ----------------------------
799 * * only 44.1/48kHz supported (the MS Win driver supports up to 192 kHz)
800 * * PCM device nb. 2:
801 * 16 x 16-bit playback - snd_emu10k1_fx8010_playback_ops
802 * 16 x 32-bit capture - snd_emu10k1_capture_efx_ops
803 */
snd_emu10k1_emu1010_init(struct snd_emu10k1 * emu)804 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
805 {
806 u32 tmp, tmp2, reg;
807 int err;
808
809 dev_info(emu->card->dev, "emu1010: Special config.\n");
810
811 /* Mute, and disable audio and lock cache, just in case.
812 * Proper init follows in snd_emu10k1_init(). */
813 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG);
814
815 guard(snd_emu1010_fpga_lock)(emu);
816
817 dev_info(emu->card->dev, "emu1010: Loading Hana Firmware\n");
818 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
819 if (err < 0) {
820 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
821 return err;
822 }
823
824 /* ID, should read & 0x7f = 0x55 when FPGA programmed. */
825 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
826 if ((reg & 0x3f) != 0x15) {
827 /* FPGA failed to be programmed */
828 dev_info(emu->card->dev,
829 "emu1010: Loading Hana Firmware file failed, reg = 0x%x\n",
830 reg);
831 return -ENODEV;
832 }
833
834 dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n");
835 snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp);
836 snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2);
837 dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2);
838 /* Enable 48Volt power to Audio Dock */
839 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON);
840
841 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®);
842 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg);
843 if (reg & EMU_HANA_OPTION_DOCK_OFFLINE)
844 snd_emu1010_load_dock_firmware(emu);
845 if (emu->card_capabilities->no_adat) {
846 emu->emu1010.optical_in = 0; /* IN_SPDIF */
847 emu->emu1010.optical_out = 0; /* OUT_SPDIF */
848 } else {
849 /* Optical -> ADAT I/O */
850 emu->emu1010.optical_in = 1; /* IN_ADAT */
851 emu->emu1010.optical_out = 1; /* OUT_ADAT */
852 }
853 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
854 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
855 snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
856 /* Set no attenuation on Audio Dock pads. */
857 emu->emu1010.adc_pads = 0x00;
858 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, emu->emu1010.adc_pads);
859 /* Unmute Audio dock DACs, Headphone source DAC-4. */
860 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, EMU_HANA_DOCK_PHONES_192_DAC4);
861 /* DAC PADs. */
862 emu->emu1010.dac_pads = EMU_HANA_DOCK_DAC_PAD1 | EMU_HANA_DOCK_DAC_PAD2 |
863 EMU_HANA_DOCK_DAC_PAD3 | EMU_HANA_DOCK_DAC_PAD4;
864 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, emu->emu1010.dac_pads);
865 /* SPDIF Format. Set Consumer mode, 24bit, copy enable */
866 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, EMU_HANA_SPDIF_MODE_RX_INVALID);
867 /* MIDI routing */
868 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, EMU_HANA_MIDI_INA_FROM_HAMOA | EMU_HANA_MIDI_INB_FROM_DOCK2);
869 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, EMU_HANA_MIDI_OUT_DOCK2 | EMU_HANA_MIDI_OUT_SYNC2);
870
871 emu->gpio_interrupt = emu1010_interrupt;
872 // Note: The Audigy INTE is set later
873 snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE,
874 EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST | EMU_HANA_IRQ_WCLK_CHANGED);
875 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, ®); // Clear pending IRQs
876
877 emu->emu1010.clock_source = 1; /* 48000 */
878 emu->emu1010.clock_fallback = 1; /* 48000 */
879 /* Default WCLK set to 48kHz. */
880 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K);
881 /* Word Clock source, Internal 48kHz x1 */
882 emu->emu1010.wclock = EMU_HANA_WCLOCK_INT_48K;
883 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
884 /* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
885 snd_emu1010_update_clock(emu);
886
887 // The routes are all set to EMU_SRC_SILENCE due to the reset,
888 // so it is safe to simply enable the outputs.
889 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
890
891 return 0;
892 }
893 /*
894 * Create the EMU10K1 instance
895 */
896
897 #ifdef CONFIG_PM_SLEEP
898 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
899 static void free_pm_buffer(struct snd_emu10k1 *emu);
900 #endif
901
snd_emu10k1_free(struct snd_card * card)902 static void snd_emu10k1_free(struct snd_card *card)
903 {
904 struct snd_emu10k1 *emu = card->private_data;
905
906 if (emu->port) { /* avoid access to already used hardware */
907 snd_emu10k1_fx8010_tram_setup(emu, 0);
908 snd_emu10k1_done(emu);
909 snd_emu10k1_free_efx(emu);
910 }
911 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) {
912 /* Disable 48Volt power to Audio Dock */
913 snd_emu1010_fpga_write_lock(emu, EMU_HANA_DOCK_PWR, 0);
914 }
915 cancel_work_sync(&emu->emu1010.work);
916 mutex_destroy(&emu->emu1010.lock);
917 release_firmware(emu->firmware);
918 release_firmware(emu->dock_fw);
919 snd_util_memhdr_free(emu->memhdr);
920 if (emu->silent_page.area)
921 snd_dma_free_pages(&emu->silent_page);
922 if (emu->ptb_pages.area)
923 snd_dma_free_pages(&emu->ptb_pages);
924 vfree(emu->page_ptr_table);
925 vfree(emu->page_addr_table);
926 #ifdef CONFIG_PM_SLEEP
927 free_pm_buffer(emu);
928 #endif
929 }
930
931 static const struct snd_emu_chip_details emu_chip_details[] = {
932 /* Audigy 5/Rx SB1550 */
933 /* Tested by michael@gernoth.net 28 Mar 2015 */
934 /* DSP: CA10300-IAT LF
935 * DAC: Cirrus Logic CS4382-KQZ
936 * ADC: Philips 1361T
937 * AC97: Sigmatel STAC9750
938 * CA0151: None
939 */
940 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10241102,
941 .driver = "Audigy2", .name = "SB Audigy 5/Rx [SB1550]",
942 .id = "Audigy2",
943 .emu10k2_chip = 1,
944 .ca0108_chip = 1,
945 .spk71 = 1,
946 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
947 .ac97_chip = 1},
948 /* Audigy4 (Not PRO) SB0610 */
949 /* Tested by James@superbug.co.uk 4th April 2006 */
950 /* A_IOCFG bits
951 * Output
952 * 0: ?
953 * 1: ?
954 * 2: ?
955 * 3: 0 - Digital Out, 1 - Line in
956 * 4: ?
957 * 5: ?
958 * 6: ?
959 * 7: ?
960 * Input
961 * 8: ?
962 * 9: ?
963 * A: Green jack sense (Front)
964 * B: ?
965 * C: Black jack sense (Rear/Side Right)
966 * D: Yellow jack sense (Center/LFE/Side Left)
967 * E: ?
968 * F: ?
969 *
970 * Digital Out/Line in switch using A_IOCFG bit 3 (0x08)
971 * 0 - Digital Out
972 * 1 - Line in
973 */
974 /* Mic input not tested.
975 * Analog CD input not tested
976 * Digital Out not tested.
977 * Line in working.
978 * Audio output 5.1 working. Side outputs not working.
979 */
980 /* DSP: CA10300-IAT LF
981 * DAC: Cirrus Logic CS4382-KQZ
982 * ADC: Philips 1361T
983 * AC97: Sigmatel STAC9750
984 * CA0151: None
985 */
986 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
987 .driver = "Audigy2", .name = "SB Audigy 4 [SB0610]",
988 .id = "Audigy2",
989 .emu10k2_chip = 1,
990 .ca0108_chip = 1,
991 .spk71 = 1,
992 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
993 .ac97_chip = 1} ,
994 /* Audigy 2 Value AC3 out does not work yet.
995 * Need to find out how to turn off interpolators.
996 */
997 /* Tested by James@superbug.co.uk 3rd July 2005 */
998 /* DSP: CA0108-IAT
999 * DAC: CS4382-KQ
1000 * ADC: Philips 1361T
1001 * AC97: STAC9750
1002 * CA0151: None
1003 */
1004 /*
1005 * A_IOCFG Input (GPIO)
1006 * 0x400 = Front analog jack plugged in. (Green socket)
1007 * 0x1000 = Rear analog jack plugged in. (Black socket)
1008 * 0x2000 = Center/LFE analog jack plugged in. (Orange socket)
1009 * A_IOCFG Output (GPIO)
1010 * 0x60 = Sound out of front Left.
1011 * Win sets it to 0xXX61
1012 */
1013 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
1014 .driver = "Audigy2", .name = "SB Audigy 2 Value [SB0400]",
1015 .id = "Audigy2",
1016 .emu10k2_chip = 1,
1017 .ca0108_chip = 1,
1018 .spk71 = 1,
1019 .ac97_chip = 1} ,
1020 /* Audigy 2 ZS Notebook Cardbus card.*/
1021 /* Tested by James@superbug.co.uk 6th November 2006 */
1022 /* Audio output 7.1/Headphones working.
1023 * Digital output working. (AC3 not checked, only PCM)
1024 * Audio Mic/Line inputs working.
1025 * Digital input not tested.
1026 */
1027 /* DSP: Tina2
1028 * DAC: Wolfson WM8768/WM8568
1029 * ADC: Wolfson WM8775
1030 * AC97: None
1031 * CA0151: None
1032 */
1033 /* Tested by James@superbug.co.uk 4th April 2006 */
1034 /* A_IOCFG bits
1035 * Output
1036 * 0: Not Used
1037 * 1: 0 = Mute all the 7.1 channel out. 1 = unmute.
1038 * 2: Analog input 0 = line in, 1 = mic in
1039 * 3: Not Used
1040 * 4: Digital output 0 = off, 1 = on.
1041 * 5: Not Used
1042 * 6: Not Used
1043 * 7: Not Used
1044 * Input
1045 * All bits 1 (0x3fxx) means nothing plugged in.
1046 * 8-9: 0 = Line in/Mic, 2 = Optical in, 3 = Nothing.
1047 * A-B: 0 = Headphones, 2 = Optical out, 3 = Nothing.
1048 * C-D: 2 = Front/Rear/etc, 3 = nothing.
1049 * E-F: Always 0
1050 *
1051 */
1052 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
1053 .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
1054 .id = "Audigy2",
1055 .emu10k2_chip = 1,
1056 .ca0108_chip = 1,
1057 .ca_cardbus_chip = 1,
1058 .spi_dac = 1,
1059 .i2c_adc = 1,
1060 .spk71 = 1} ,
1061 /* This is MAEM8950 "Mana" */
1062 /* Attach MicroDock[M] to make it an E-MU 1616[m]. */
1063 /* Does NOT support sync daughter card (obviously). */
1064 /* Tested by James@superbug.co.uk 4th Nov 2007. */
1065 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102,
1066 .driver = "Audigy2", .name = "E-MU 02 CardBus [MAEM8950]",
1067 .id = "EMU1010",
1068 .emu10k2_chip = 1,
1069 .ca0108_chip = 1,
1070 .ca_cardbus_chip = 1,
1071 .spk71 = 1 ,
1072 .emu_model = EMU_MODEL_EMU1616},
1073 /* Tested by James@superbug.co.uk 4th Nov 2007. */
1074 /* This is MAEM8960 "Hana3", 0202 is MAEM8980 */
1075 /* Attach 0202 daughter card to make it an E-MU 1212m, OR a
1076 * MicroDock[M] to make it an E-MU 1616[m]. */
1077 /* Does NOT support sync daughter card. */
1078 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102,
1079 .driver = "Audigy2", .name = "E-MU 1010b PCI [MAEM8960]",
1080 .id = "EMU1010",
1081 .emu10k2_chip = 1,
1082 .ca0108_chip = 1,
1083 .spk71 = 1,
1084 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 new revision */
1085 /* Tested by Maxim Kachur <mcdebugger@duganet.ru> 17th Oct 2012. */
1086 /* This is MAEM8986, 0202 is MAEM8980 */
1087 /* Attach 0202 daughter card to make it an E-MU 1212m, OR a
1088 * MicroDockM to make it an E-MU 1616m. The non-m
1089 * version was never sold with this card, but should
1090 * still work. */
1091 /* Does NOT support sync daughter card. */
1092 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40071102,
1093 .driver = "Audigy2", .name = "E-MU 1010 PCIe [MAEM8986]",
1094 .id = "EMU1010",
1095 .emu10k2_chip = 1,
1096 .ca0108_chip = 1,
1097 .spk71 = 1,
1098 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 PCIe */
1099 /* Tested by James@superbug.co.uk 8th July 2005. */
1100 /* This is MAEM8810 "Hana", 0202 is MAEM8820 "Hamoa" */
1101 /* Attach 0202 daughter card to make it an E-MU 1212m, OR an
1102 * AudioDock[M] to make it an E-MU 1820[m]. */
1103 /* Supports sync daughter card. */
1104 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
1105 .driver = "Audigy2", .name = "E-MU 1010 [MAEM8810]",
1106 .id = "EMU1010",
1107 .emu10k2_chip = 1,
1108 .ca0102_chip = 1,
1109 .spk71 = 1,
1110 .emu_model = EMU_MODEL_EMU1010}, /* EMU 1010 old revision */
1111 /* This is MAEM8852 "HanaLiteLite" */
1112 /* Supports sync daughter card. */
1113 /* Tested by oswald.buddenhagen@gmx.de Mar 2023. */
1114 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40021102,
1115 .driver = "Audigy2", .name = "E-MU 0404b PCI [MAEM8852]",
1116 .id = "EMU0404",
1117 .emu10k2_chip = 1,
1118 .ca0108_chip = 1,
1119 .spk20 = 1,
1120 .no_adat = 1,
1121 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 new revision */
1122 /* This is MAEM8850 "HanaLite" */
1123 /* Supports sync daughter card. */
1124 /* Tested by James@superbug.co.uk 20-3-2007. */
1125 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40021102,
1126 .driver = "Audigy2", .name = "E-MU 0404 [MAEM8850]",
1127 .id = "EMU0404",
1128 .emu10k2_chip = 1,
1129 .ca0102_chip = 1,
1130 .spk20 = 1,
1131 .no_adat = 1,
1132 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 */
1133 /* EMU0404 PCIe */
1134 /* Does NOT support sync daughter card. */
1135 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40051102,
1136 .driver = "Audigy2", .name = "E-MU 0404 PCIe [MAEM8984]",
1137 .id = "EMU0404",
1138 .emu10k2_chip = 1,
1139 .ca0108_chip = 1,
1140 .spk20 = 1,
1141 .no_adat = 1,
1142 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 PCIe ver_03 */
1143 {.vendor = 0x1102, .device = 0x0008,
1144 .driver = "Audigy2", .name = "SB Audigy 2 Value [Unknown]",
1145 .id = "Audigy2",
1146 .emu10k2_chip = 1,
1147 .ca0108_chip = 1,
1148 .ac97_chip = 1} ,
1149 /* Tested by James@superbug.co.uk 3rd July 2005 */
1150 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
1151 .driver = "Audigy2", .name = "SB Audigy 4 PRO [SB0380]",
1152 .id = "Audigy2",
1153 .emu10k2_chip = 1,
1154 .ca0102_chip = 1,
1155 .ca0151_chip = 1,
1156 .spk71 = 1,
1157 .spdif_bug = 1,
1158 .ac97_chip = 1} ,
1159 /* Tested by shane-alsa@cm.nu 5th Nov 2005 */
1160 /* The 0x20061102 does have SB0350 written on it
1161 * Just like 0x20021102
1162 */
1163 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102,
1164 .driver = "Audigy2", .name = "SB Audigy 2 [SB0350b]",
1165 .id = "Audigy2",
1166 .emu10k2_chip = 1,
1167 .ca0102_chip = 1,
1168 .ca0151_chip = 1,
1169 .spk71 = 1,
1170 .spdif_bug = 1,
1171 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1172 .ac97_chip = 1} ,
1173 /* 0x20051102 also has SB0350 written on it, treated as Audigy 2 ZS by
1174 Creative's Windows driver */
1175 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20051102,
1176 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350a]",
1177 .id = "Audigy2",
1178 .emu10k2_chip = 1,
1179 .ca0102_chip = 1,
1180 .ca0151_chip = 1,
1181 .spk71 = 1,
1182 .spdif_bug = 1,
1183 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1184 .ac97_chip = 1} ,
1185 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102,
1186 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350]",
1187 .id = "Audigy2",
1188 .emu10k2_chip = 1,
1189 .ca0102_chip = 1,
1190 .ca0151_chip = 1,
1191 .spk71 = 1,
1192 .spdif_bug = 1,
1193 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1194 .ac97_chip = 1} ,
1195 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102,
1196 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0360]",
1197 .id = "Audigy2",
1198 .emu10k2_chip = 1,
1199 .ca0102_chip = 1,
1200 .ca0151_chip = 1,
1201 .spk71 = 1,
1202 .spdif_bug = 1,
1203 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1204 .ac97_chip = 1} ,
1205 /* Audigy 2 */
1206 /* Tested by James@superbug.co.uk 3rd July 2005 */
1207 /* DSP: CA0102-IAT
1208 * DAC: CS4382-KQ
1209 * ADC: Philips 1361T
1210 * AC97: STAC9721
1211 * CA0151: Yes
1212 */
1213 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102,
1214 .driver = "Audigy2", .name = "SB Audigy 2 [SB0240]",
1215 .id = "Audigy2",
1216 .emu10k2_chip = 1,
1217 .ca0102_chip = 1,
1218 .ca0151_chip = 1,
1219 .spk71 = 1,
1220 .spdif_bug = 1,
1221 .adc_1361t = 1, /* 24 bit capture instead of 16bit */
1222 .ac97_chip = 1} ,
1223 /* Audigy 2 Platinum EX */
1224 /* Win driver sets A_IOCFG output to 0x1c00 */
1225 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
1226 .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]",
1227 .id = "Audigy2",
1228 .emu10k2_chip = 1,
1229 .ca0102_chip = 1,
1230 .ca0151_chip = 1,
1231 .spk71 = 1,
1232 .spdif_bug = 1} ,
1233 /* Dell OEM/Creative Labs Audigy 2 ZS */
1234 /* See ALSA bug#1365 */
1235 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102,
1236 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0353]",
1237 .id = "Audigy2",
1238 .emu10k2_chip = 1,
1239 .ca0102_chip = 1,
1240 .ca0151_chip = 1,
1241 .spk71 = 1,
1242 .spdif_bug = 1,
1243 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1244 .ac97_chip = 1} ,
1245 /* Audigy 2 Platinum */
1246 /* Win driver sets A_IOCFG output to 0xa00 */
1247 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
1248 .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]",
1249 .id = "Audigy2",
1250 .emu10k2_chip = 1,
1251 .ca0102_chip = 1,
1252 .ca0151_chip = 1,
1253 .spk71 = 1,
1254 .spdif_bug = 1,
1255 .invert_shared_spdif = 1, /* digital/analog switch swapped */
1256 .adc_1361t = 1, /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */
1257 .ac97_chip = 1} ,
1258 {.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
1259 .driver = "Audigy2", .name = "SB Audigy 2 [Unknown]",
1260 .id = "Audigy2",
1261 .emu10k2_chip = 1,
1262 .ca0102_chip = 1,
1263 .ca0151_chip = 1,
1264 .spdif_bug = 1,
1265 .ac97_chip = 1} ,
1266 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
1267 .driver = "Audigy", .name = "SB Audigy 1 [SB0092]",
1268 .id = "Audigy",
1269 .emu10k2_chip = 1,
1270 .ca0102_chip = 1,
1271 .ac97_chip = 1} ,
1272 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
1273 .driver = "Audigy", .name = "SB Audigy 1 ES [SB0160]",
1274 .id = "Audigy",
1275 .emu10k2_chip = 1,
1276 .ca0102_chip = 1,
1277 .spdif_bug = 1,
1278 .ac97_chip = 1} ,
1279 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
1280 .driver = "Audigy", .name = "SB Audigy 1 [SB0090]",
1281 .id = "Audigy",
1282 .emu10k2_chip = 1,
1283 .ca0102_chip = 1,
1284 .ac97_chip = 1} ,
1285 {.vendor = 0x1102, .device = 0x0004,
1286 .driver = "Audigy", .name = "Audigy 1 [Unknown]",
1287 .id = "Audigy",
1288 .emu10k2_chip = 1,
1289 .ca0102_chip = 1,
1290 .ac97_chip = 1} ,
1291 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102,
1292 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]",
1293 .id = "Live",
1294 .emu10k1_chip = 1,
1295 .ac97_chip = 1,
1296 .sblive51 = 1} ,
1297 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806b1102,
1298 .driver = "EMU10K1", .name = "SB Live! [SB0105]",
1299 .id = "Live",
1300 .emu10k1_chip = 1,
1301 .ac97_chip = 1,
1302 .sblive51 = 1} ,
1303 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806a1102,
1304 .driver = "EMU10K1", .name = "SB Live! Value [SB0103]",
1305 .id = "Live",
1306 .emu10k1_chip = 1,
1307 .ac97_chip = 1,
1308 .sblive51 = 1} ,
1309 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
1310 .driver = "EMU10K1", .name = "SB Live! Value [SB0101]",
1311 .id = "Live",
1312 .emu10k1_chip = 1,
1313 .ac97_chip = 1,
1314 .sblive51 = 1} ,
1315 /* Tested by ALSA bug#1680 26th December 2005 */
1316 /* note: It really has SB0220 written on the card, */
1317 /* but it's SB0228 according to kx.inf */
1318 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102,
1319 .driver = "EMU10K1", .name = "SB Live! 5.1 Dell OEM [SB0228]",
1320 .id = "Live",
1321 .emu10k1_chip = 1,
1322 .ac97_chip = 1,
1323 .sblive51 = 1} ,
1324 /* Tested by Thomas Zehetbauer 27th Aug 2005 */
1325 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
1326 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]",
1327 .id = "Live",
1328 .emu10k1_chip = 1,
1329 .ac97_chip = 1,
1330 .sblive51 = 1} ,
1331 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
1332 .driver = "EMU10K1", .name = "SB Live! 5.1",
1333 .id = "Live",
1334 .emu10k1_chip = 1,
1335 .ac97_chip = 1,
1336 .sblive51 = 1} ,
1337 /* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
1338 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
1339 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0060]",
1340 .id = "Live",
1341 .emu10k1_chip = 1,
1342 .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
1343 * share the same IDs!
1344 */
1345 .sblive51 = 1} ,
1346 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
1347 .driver = "EMU10K1", .name = "SB Live! Value [CT4850]",
1348 .id = "Live",
1349 .emu10k1_chip = 1,
1350 .ac97_chip = 1,
1351 .sblive51 = 1} ,
1352 /* SB Live! Platinum */
1353 /* Win driver sets A_IOCFG output to 0 */
1354 /* Tested by Jonathan Dowland <jon@dow.land> Apr 2023. */
1355 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
1356 .driver = "EMU10K1", .name = "SB Live! Platinum [CT4760P]",
1357 .id = "Live",
1358 .emu10k1_chip = 1,
1359 .ac97_chip = 1} ,
1360 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
1361 .driver = "EMU10K1", .name = "SB Live! Value [CT4871]",
1362 .id = "Live",
1363 .emu10k1_chip = 1,
1364 .ac97_chip = 1,
1365 .sblive51 = 1} ,
1366 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102,
1367 .driver = "EMU10K1", .name = "SB Live! Value [CT4831]",
1368 .id = "Live",
1369 .emu10k1_chip = 1,
1370 .ac97_chip = 1,
1371 .sblive51 = 1} ,
1372 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
1373 .driver = "EMU10K1", .name = "SB Live! Value [CT4870]",
1374 .id = "Live",
1375 .emu10k1_chip = 1,
1376 .ac97_chip = 1,
1377 .sblive51 = 1} ,
1378 /* Tested by James@superbug.co.uk 3rd July 2005 */
1379 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
1380 .driver = "EMU10K1", .name = "SB Live! Value [CT4832]",
1381 .id = "Live",
1382 .emu10k1_chip = 1,
1383 .ac97_chip = 1,
1384 .sblive51 = 1} ,
1385 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
1386 .driver = "EMU10K1", .name = "SB Live! Value [CT4830]",
1387 .id = "Live",
1388 .emu10k1_chip = 1,
1389 .ac97_chip = 1,
1390 .sblive51 = 1} ,
1391 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
1392 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]",
1393 .id = "Live",
1394 .emu10k1_chip = 1,
1395 .ac97_chip = 1,
1396 .sblive51 = 1} ,
1397 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
1398 .driver = "EMU10K1", .name = "SB Live! Value [CT4780]",
1399 .id = "Live",
1400 .emu10k1_chip = 1,
1401 .ac97_chip = 1,
1402 .sblive51 = 1} ,
1403 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
1404 .driver = "EMU10K1", .name = "E-MU APS [PC545]",
1405 .id = "APS",
1406 .emu10k1_chip = 1,
1407 .ecard = 1} ,
1408 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
1409 .driver = "EMU10K1", .name = "SB Live! [CT4620]",
1410 .id = "Live",
1411 .emu10k1_chip = 1,
1412 .ac97_chip = 1,
1413 .sblive51 = 1} ,
1414 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
1415 .driver = "EMU10K1", .name = "SB Live! Value [CT4670]",
1416 .id = "Live",
1417 .emu10k1_chip = 1,
1418 .ac97_chip = 1,
1419 .sblive51 = 1} ,
1420 {.vendor = 0x1102, .device = 0x0002,
1421 .driver = "EMU10K1", .name = "SB Live! [Unknown]",
1422 .id = "Live",
1423 .emu10k1_chip = 1,
1424 .ac97_chip = 1,
1425 .sblive51 = 1} ,
1426 { } /* terminator */
1427 };
1428
1429 /*
1430 * The chip (at least the Audigy 2 CA0102 chip, but most likely others, too)
1431 * has a problem that from time to time it likes to do few DMA reads a bit
1432 * beyond its normal allocation and gets very confused if these reads get
1433 * blocked by a IOMMU.
1434 *
1435 * This behaviour has been observed for the first (reserved) page
1436 * (for which it happens multiple times at every playback), often for various
1437 * synth pages and sometimes for PCM playback buffers and the page table
1438 * memory itself.
1439 *
1440 * As a workaround let's widen these DMA allocations by an extra page if we
1441 * detect that the device is behind a non-passthrough IOMMU.
1442 */
snd_emu10k1_detect_iommu(struct snd_emu10k1 * emu)1443 static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu)
1444 {
1445 struct iommu_domain *domain;
1446
1447 emu->iommu_workaround = false;
1448
1449 domain = iommu_get_domain_for_dev(emu->card->dev);
1450 if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
1451 return;
1452
1453 dev_notice(emu->card->dev,
1454 "non-passthrough IOMMU detected, widening DMA allocations");
1455 emu->iommu_workaround = true;
1456 }
1457
snd_emu10k1_create(struct snd_card * card,struct pci_dev * pci,unsigned short extin_mask,unsigned short extout_mask,long max_cache_bytes,int enable_ir,uint subsystem)1458 int snd_emu10k1_create(struct snd_card *card,
1459 struct pci_dev *pci,
1460 unsigned short extin_mask,
1461 unsigned short extout_mask,
1462 long max_cache_bytes,
1463 int enable_ir,
1464 uint subsystem)
1465 {
1466 struct snd_emu10k1 *emu = card->private_data;
1467 int idx, err;
1468 int is_audigy;
1469 size_t page_table_size;
1470 __le32 *pgtbl;
1471 unsigned int silent_page;
1472 const struct snd_emu_chip_details *c;
1473
1474 /* enable PCI device */
1475 err = pcim_enable_device(pci);
1476 if (err < 0)
1477 return err;
1478
1479 card->private_free = snd_emu10k1_free;
1480 emu->card = card;
1481 spin_lock_init(&emu->reg_lock);
1482 spin_lock_init(&emu->emu_lock);
1483 spin_lock_init(&emu->spi_lock);
1484 spin_lock_init(&emu->i2c_lock);
1485 spin_lock_init(&emu->voice_lock);
1486 spin_lock_init(&emu->synth_lock);
1487 spin_lock_init(&emu->memblk_lock);
1488 mutex_init(&emu->fx8010.lock);
1489 INIT_LIST_HEAD(&emu->mapped_link_head);
1490 INIT_LIST_HEAD(&emu->mapped_order_link_head);
1491 emu->pci = pci;
1492 emu->irq = -1;
1493 emu->synth = NULL;
1494 emu->get_synth_voice = NULL;
1495 INIT_WORK(&emu->emu1010.work, emu1010_work);
1496 mutex_init(&emu->emu1010.lock);
1497 /* read revision & serial */
1498 emu->revision = pci->revision;
1499 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1500 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1501 dev_dbg(card->dev,
1502 "vendor = 0x%x, device = 0x%x, subsystem_vendor_id = 0x%x, subsystem_id = 0x%x\n",
1503 pci->vendor, pci->device, emu->serial, emu->model);
1504
1505 for (c = emu_chip_details; c->vendor; c++) {
1506 if (c->vendor == pci->vendor && c->device == pci->device) {
1507 if (subsystem) {
1508 if (c->subsystem && (c->subsystem == subsystem))
1509 break;
1510 else
1511 continue;
1512 } else {
1513 if (c->subsystem && (c->subsystem != emu->serial))
1514 continue;
1515 if (c->revision && c->revision != emu->revision)
1516 continue;
1517 }
1518 break;
1519 }
1520 }
1521 if (c->vendor == 0) {
1522 dev_err(card->dev, "emu10k1: Card not recognised\n");
1523 return -ENOENT;
1524 }
1525 emu->card_capabilities = c;
1526 if (c->subsystem && !subsystem)
1527 dev_dbg(card->dev, "Sound card name = %s\n", c->name);
1528 else if (subsystem)
1529 dev_dbg(card->dev, "Sound card name = %s, "
1530 "vendor = 0x%x, device = 0x%x, subsystem = 0x%x. "
1531 "Forced to subsystem = 0x%x\n", c->name,
1532 pci->vendor, pci->device, emu->serial, c->subsystem);
1533 else
1534 dev_dbg(card->dev, "Sound card name = %s, "
1535 "vendor = 0x%x, device = 0x%x, subsystem = 0x%x.\n",
1536 c->name, pci->vendor, pci->device,
1537 emu->serial);
1538
1539 if (!*card->id && c->id)
1540 strscpy(card->id, c->id, sizeof(card->id));
1541
1542 is_audigy = emu->audigy = c->emu10k2_chip;
1543
1544 snd_emu10k1_detect_iommu(emu);
1545
1546 /* set addressing mode */
1547 emu->address_mode = is_audigy ? 0 : 1;
1548 /* set the DMA transfer mask */
1549 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
1550 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) {
1551 dev_err(card->dev,
1552 "architecture does not support PCI busmaster DMA with mask 0x%lx\n",
1553 emu->dma_mask);
1554 return -ENXIO;
1555 }
1556 if (is_audigy)
1557 emu->gpr_base = A_FXGPREGBASE;
1558 else
1559 emu->gpr_base = FXGPREGBASE;
1560
1561 err = pcim_request_all_regions(pci, "EMU10K1");
1562 if (err < 0)
1563 return err;
1564 emu->port = pci_resource_start(pci, 0);
1565
1566 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1567
1568 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 :
1569 MAXPAGES0);
1570 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size,
1571 &emu->ptb_pages) < 0)
1572 return -ENOMEM;
1573 dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n",
1574 (unsigned long)emu->ptb_pages.addr,
1575 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes));
1576
1577 emu->page_ptr_table = vmalloc(array_size(sizeof(void *),
1578 emu->max_cache_pages));
1579 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long),
1580 emu->max_cache_pages));
1581 if (!emu->page_ptr_table || !emu->page_addr_table)
1582 return -ENOMEM;
1583
1584 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE,
1585 &emu->silent_page) < 0)
1586 return -ENOMEM;
1587 dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n",
1588 (unsigned long)emu->silent_page.addr,
1589 (unsigned long)(emu->silent_page.addr +
1590 emu->silent_page.bytes));
1591
1592 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1593 if (!emu->memhdr)
1594 return -ENOMEM;
1595 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1596 sizeof(struct snd_util_memblk);
1597
1598 pci_set_master(pci);
1599
1600 // The masks are not used for Audigy.
1601 // FIXME: these should come from the card_capabilites table.
1602 if (extin_mask == 0)
1603 extin_mask = 0x3fcf; // EXTIN_*
1604 if (extout_mask == 0)
1605 extout_mask = 0x7fff; // EXTOUT_*
1606 emu->fx8010.extin_mask = extin_mask;
1607 emu->fx8010.extout_mask = extout_mask;
1608 emu->enable_ir = enable_ir;
1609
1610 if (emu->card_capabilities->ca_cardbus_chip) {
1611 err = snd_emu10k1_cardbus_init(emu);
1612 if (err < 0)
1613 return err;
1614 }
1615 if (emu->card_capabilities->ecard) {
1616 err = snd_emu10k1_ecard_init(emu);
1617 if (err < 0)
1618 return err;
1619 } else if (emu->card_capabilities->emu_model) {
1620 err = snd_emu10k1_emu1010_init(emu);
1621 if (err < 0)
1622 return err;
1623 } else {
1624 /* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
1625 does not support this, it shouldn't do any harm */
1626 snd_emu10k1_ptr_write(emu, AC97SLOT, 0,
1627 AC97SLOT_CNTR|AC97SLOT_LFE);
1628 }
1629
1630 /* initialize TRAM setup */
1631 emu->fx8010.itram_size = (16 * 1024)/2;
1632 emu->fx8010.etram_pages.area = NULL;
1633 emu->fx8010.etram_pages.bytes = 0;
1634
1635 /* irq handler must be registered after I/O ports are activated */
1636 if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1_interrupt,
1637 IRQF_SHARED, KBUILD_MODNAME, emu))
1638 return -EBUSY;
1639 emu->irq = pci->irq;
1640 card->sync_irq = emu->irq;
1641
1642 /*
1643 * Init to 0x02109204 :
1644 * Clock accuracy = 0 (1000ppm)
1645 * Sample Rate = 2 (48kHz)
1646 * Audio Channel = 1 (Left of 2)
1647 * Source Number = 0 (Unspecified)
1648 * Generation Status = 1 (Original for Cat Code 12)
1649 * Cat Code = 12 (Digital Signal Mixer)
1650 * Mode = 0 (Mode 0)
1651 * Emphasis = 0 (None)
1652 * CP = 1 (Copyright unasserted)
1653 * AN = 0 (Audio data)
1654 * P = 0 (Consumer)
1655 */
1656 emu->spdif_bits[0] = emu->spdif_bits[1] =
1657 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1658 SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
1659 SPCS_GENERATIONSTATUS | 0x00001200 |
1660 0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
1661
1662 /* Clear silent pages and set up pointers */
1663 memset(emu->silent_page.area, 0, emu->silent_page.bytes);
1664 silent_page = emu->silent_page.addr << emu->address_mode;
1665 pgtbl = (__le32 *)emu->ptb_pages.area;
1666 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
1667 pgtbl[idx] = cpu_to_le32(silent_page | idx);
1668
1669 /* set up voice indices */
1670 for (idx = 0; idx < NUM_G; idx++)
1671 emu->voices[idx].number = idx;
1672
1673 err = snd_emu10k1_init(emu, enable_ir);
1674 if (err < 0)
1675 return err;
1676 #ifdef CONFIG_PM_SLEEP
1677 err = alloc_pm_buffer(emu);
1678 if (err < 0)
1679 return err;
1680 #endif
1681
1682 /* Initialize the effect engine */
1683 err = snd_emu10k1_init_efx(emu);
1684 if (err < 0)
1685 return err;
1686 snd_emu10k1_audio_enable(emu);
1687
1688 #ifdef CONFIG_SND_PROC_FS
1689 snd_emu10k1_proc_init(emu);
1690 #endif
1691 return 0;
1692 }
1693
1694 #ifdef CONFIG_PM_SLEEP
1695 static const unsigned char saved_regs[] = {
1696 CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP,
1697 FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL,
1698 ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2,
1699 TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA,
1700 MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2,
1701 SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX,
1702 0xff /* end */
1703 };
1704 static const unsigned char saved_regs_audigy[] = {
1705 A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_EHC,
1706 A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
1707 0xff /* end */
1708 };
1709
alloc_pm_buffer(struct snd_emu10k1 * emu)1710 static int alloc_pm_buffer(struct snd_emu10k1 *emu)
1711 {
1712 int size;
1713
1714 size = ARRAY_SIZE(saved_regs);
1715 if (emu->audigy)
1716 size += ARRAY_SIZE(saved_regs_audigy);
1717 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size));
1718 if (!emu->saved_ptr)
1719 return -ENOMEM;
1720 if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1721 return -ENOMEM;
1722 if (emu->card_capabilities->ca0151_chip &&
1723 snd_p16v_alloc_pm_buffer(emu) < 0)
1724 return -ENOMEM;
1725 return 0;
1726 }
1727
free_pm_buffer(struct snd_emu10k1 * emu)1728 static void free_pm_buffer(struct snd_emu10k1 *emu)
1729 {
1730 vfree(emu->saved_ptr);
1731 snd_emu10k1_efx_free_pm_buffer(emu);
1732 if (emu->card_capabilities->ca0151_chip)
1733 snd_p16v_free_pm_buffer(emu);
1734 }
1735
snd_emu10k1_suspend_regs(struct snd_emu10k1 * emu)1736 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1737 {
1738 int i;
1739 const unsigned char *reg;
1740 unsigned int *val;
1741
1742 val = emu->saved_ptr;
1743 for (reg = saved_regs; *reg != 0xff; reg++)
1744 for (i = 0; i < NUM_G; i++, val++)
1745 *val = snd_emu10k1_ptr_read(emu, *reg, i);
1746 if (emu->audigy) {
1747 for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1748 for (i = 0; i < NUM_G; i++, val++)
1749 *val = snd_emu10k1_ptr_read(emu, *reg, i);
1750 }
1751 if (emu->audigy)
1752 emu->saved_a_iocfg = inw(emu->port + A_IOCFG);
1753 emu->saved_hcfg = inl(emu->port + HCFG);
1754 }
1755
snd_emu10k1_resume_init(struct snd_emu10k1 * emu)1756 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1757 {
1758 if (emu->card_capabilities->ca_cardbus_chip)
1759 snd_emu10k1_cardbus_init(emu);
1760 if (emu->card_capabilities->ecard)
1761 snd_emu10k1_ecard_init(emu);
1762 else if (emu->card_capabilities->emu_model)
1763 snd_emu10k1_emu1010_init(emu);
1764 else
1765 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1766 snd_emu10k1_init(emu, emu->enable_ir);
1767 }
1768
snd_emu10k1_resume_regs(struct snd_emu10k1 * emu)1769 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1770 {
1771 int i;
1772 const unsigned char *reg;
1773 unsigned int *val;
1774
1775 snd_emu10k1_audio_enable(emu);
1776
1777 /* resore for spdif */
1778 if (emu->audigy)
1779 outw(emu->saved_a_iocfg, emu->port + A_IOCFG);
1780 outl(emu->saved_hcfg, emu->port + HCFG);
1781
1782 val = emu->saved_ptr;
1783 for (reg = saved_regs; *reg != 0xff; reg++)
1784 for (i = 0; i < NUM_G; i++, val++)
1785 snd_emu10k1_ptr_write(emu, *reg, i, *val);
1786 if (emu->audigy) {
1787 for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1788 for (i = 0; i < NUM_G; i++, val++)
1789 snd_emu10k1_ptr_write(emu, *reg, i, *val);
1790 }
1791 }
1792 #endif
1793