Lines Matching refs:emu
58 void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch) in snd_emu10k1_voice_init() argument
60 snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0); in snd_emu10k1_voice_init()
61 snd_emu10k1_ptr_write(emu, IP, ch, 0); in snd_emu10k1_voice_init()
62 snd_emu10k1_ptr_write(emu, VTFT, ch, 0xffff); in snd_emu10k1_voice_init()
63 snd_emu10k1_ptr_write(emu, CVCF, ch, 0xffff); in snd_emu10k1_voice_init()
64 snd_emu10k1_ptr_write(emu, PTRX, ch, 0); in snd_emu10k1_voice_init()
65 snd_emu10k1_ptr_write(emu, CPF, ch, 0); in snd_emu10k1_voice_init()
66 snd_emu10k1_ptr_write(emu, CCR, ch, 0); in snd_emu10k1_voice_init()
68 snd_emu10k1_ptr_write(emu, PSST, ch, 0); in snd_emu10k1_voice_init()
69 snd_emu10k1_ptr_write(emu, DSL, ch, 0x10); in snd_emu10k1_voice_init()
70 snd_emu10k1_ptr_write(emu, CCCA, ch, 0); in snd_emu10k1_voice_init()
71 snd_emu10k1_ptr_write(emu, Z1, ch, 0); in snd_emu10k1_voice_init()
72 snd_emu10k1_ptr_write(emu, Z2, ch, 0); in snd_emu10k1_voice_init()
73 snd_emu10k1_ptr_write(emu, FXRT, ch, 0x32100000); in snd_emu10k1_voice_init()
75 snd_emu10k1_ptr_write(emu, ATKHLDM, ch, 0); in snd_emu10k1_voice_init()
76 snd_emu10k1_ptr_write(emu, DCYSUSM, ch, 0); in snd_emu10k1_voice_init()
77 snd_emu10k1_ptr_write(emu, IFATN, ch, 0xffff); in snd_emu10k1_voice_init()
78 snd_emu10k1_ptr_write(emu, PEFE, ch, 0); in snd_emu10k1_voice_init()
79 snd_emu10k1_ptr_write(emu, FMMOD, ch, 0); in snd_emu10k1_voice_init()
80 snd_emu10k1_ptr_write(emu, TREMFRQ, ch, 24); /* 1 Hz */ in snd_emu10k1_voice_init()
81 snd_emu10k1_ptr_write(emu, FM2FRQ2, ch, 24); /* 1 Hz */ in snd_emu10k1_voice_init()
82 snd_emu10k1_ptr_write(emu, TEMPENV, ch, 0); in snd_emu10k1_voice_init()
85 snd_emu10k1_ptr_write(emu, LFOVAL2, ch, 0); in snd_emu10k1_voice_init()
86 snd_emu10k1_ptr_write(emu, LFOVAL1, ch, 0); in snd_emu10k1_voice_init()
87 snd_emu10k1_ptr_write(emu, ATKHLDV, ch, 0); in snd_emu10k1_voice_init()
88 snd_emu10k1_ptr_write(emu, ENVVOL, ch, 0); in snd_emu10k1_voice_init()
89 snd_emu10k1_ptr_write(emu, ENVVAL, ch, 0); in snd_emu10k1_voice_init()
92 if (emu->audigy) { in snd_emu10k1_voice_init()
93 snd_emu10k1_ptr_write(emu, 0x4c, ch, 0); /* ?? */ in snd_emu10k1_voice_init()
94 snd_emu10k1_ptr_write(emu, 0x4d, ch, 0); /* ?? */ in snd_emu10k1_voice_init()
95 snd_emu10k1_ptr_write(emu, 0x4e, ch, 0); /* ?? */ in snd_emu10k1_voice_init()
96 snd_emu10k1_ptr_write(emu, 0x4f, ch, 0); /* ?? */ in snd_emu10k1_voice_init()
97 snd_emu10k1_ptr_write(emu, A_FXRT1, ch, 0x03020100); in snd_emu10k1_voice_init()
98 snd_emu10k1_ptr_write(emu, A_FXRT2, ch, 0x3f3f3f3f); in snd_emu10k1_voice_init()
99 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, ch, 0); in snd_emu10k1_voice_init()
143 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir, int resume) in snd_emu10k1_init() argument
151 HCFG_MUTEBUTTONENABLE, emu->port + HCFG); in snd_emu10k1_init()
154 snd_emu10k1_ptr_write(emu, MICBS, 0, ADCBS_BUFSIZE_NONE); in snd_emu10k1_init()
155 snd_emu10k1_ptr_write(emu, MICBA, 0, 0); in snd_emu10k1_init()
156 snd_emu10k1_ptr_write(emu, FXBS, 0, ADCBS_BUFSIZE_NONE); in snd_emu10k1_init()
157 snd_emu10k1_ptr_write(emu, FXBA, 0, 0); in snd_emu10k1_init()
158 snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE); in snd_emu10k1_init()
159 snd_emu10k1_ptr_write(emu, ADCBA, 0, 0); in snd_emu10k1_init()
162 outl(0, emu->port + INTE); in snd_emu10k1_init()
163 snd_emu10k1_ptr_write(emu, CLIEL, 0, 0); in snd_emu10k1_init()
164 snd_emu10k1_ptr_write(emu, CLIEH, 0, 0); in snd_emu10k1_init()
165 snd_emu10k1_ptr_write(emu, SOLEL, 0, 0); in snd_emu10k1_init()
166 snd_emu10k1_ptr_write(emu, SOLEH, 0, 0); in snd_emu10k1_init()
168 if (emu->audigy) { in snd_emu10k1_init()
170 snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT); in snd_emu10k1_init()
172 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT | in snd_emu10k1_init()
178 snd_emu10k1_voice_init(emu, ch); in snd_emu10k1_init()
180 snd_emu10k1_ptr_write(emu, SPCS0, 0, emu->spdif_bits[0]); in snd_emu10k1_init()
181 snd_emu10k1_ptr_write(emu, SPCS1, 0, emu->spdif_bits[1]); in snd_emu10k1_init()
182 snd_emu10k1_ptr_write(emu, SPCS2, 0, emu->spdif_bits[2]); in snd_emu10k1_init()
184 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ in snd_emu10k1_init()
187 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0); in snd_emu10k1_init()
190 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp); in snd_emu10k1_init()
193 snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14); in snd_emu10k1_init()
196 snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF); in snd_emu10k1_init()
199 outl(0x0201, emu->port + HCFG2); in snd_emu10k1_init()
201 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4); in snd_emu10k1_init()
203 if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */ in snd_emu10k1_init()
205 dev_info(emu->card->dev, "Audigy2 value: Special config.\n"); in snd_emu10k1_init()
207 tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0); in snd_emu10k1_init()
210 snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp); in snd_emu10k1_init()
213 outl(0x600000, emu->port + 0x20); in snd_emu10k1_init()
214 outl(0x14, emu->port + 0x24); in snd_emu10k1_init()
217 outl(0x7b0000, emu->port + 0x20); in snd_emu10k1_init()
218 outl(0xFF000000, emu->port + 0x24); in snd_emu10k1_init()
224 outl(0x7a0000, emu->port + 0x20); in snd_emu10k1_init()
225 outl(0xFF000000, emu->port + 0x24); in snd_emu10k1_init()
226 tmp = inl(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */ in snd_emu10k1_init()
227 outl(tmp, emu->port + A_IOCFG); in snd_emu10k1_init()
229 if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */ in snd_emu10k1_init()
234 snd_emu10k1_spi_write(emu, spi_dac_init[n]); in snd_emu10k1_init()
236 snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10); in snd_emu10k1_init()
247 outl(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */ in snd_emu10k1_init()
249 if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */ in snd_emu10k1_init()
252 snd_emu10k1_ptr20_write(emu, P17V_I2S_SRC_SEL, 0, 0x2020205f); in snd_emu10k1_init()
253 tmp = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
254 outl(tmp | 0x4, emu->port + A_IOCFG); /* Set bit 2 for mic input */ in snd_emu10k1_init()
255 tmp = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
258 snd_emu10k1_i2c_write(emu, i2c_adc_init[n][0], i2c_adc_init[n][1]); in snd_emu10k1_init()
260 emu->i2c_capture_volume[n][0] = 0xcf; in snd_emu10k1_init()
261 emu->i2c_capture_volume[n][1] = 0xcf; in snd_emu10k1_init()
266 snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr); in snd_emu10k1_init()
267 snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */ in snd_emu10k1_init()
268 snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */ in snd_emu10k1_init()
270 …silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : … in snd_emu10k1_init()
272 snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page); in snd_emu10k1_init()
273 snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page); in snd_emu10k1_init()
276 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
279 HCFG_AUDIOENABLE, emu->port + HCFG); in snd_emu10k1_init()
287 } else if (emu->audigy) { in snd_emu10k1_init()
288 if (emu->revision == 4) /* audigy2 */ in snd_emu10k1_init()
292 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
294 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
297 } else if (emu->model == 0x20 || in snd_emu10k1_init()
298 emu->model == 0xc400 || in snd_emu10k1_init()
299 (emu->model == 0x21 && emu->revision < 6)) in snd_emu10k1_init()
300 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG); in snd_emu10k1_init()
303 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); in snd_emu10k1_init()
306 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
308 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_init()
310 } else if (emu->audigy) { in snd_emu10k1_init()
311 unsigned int reg = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
312 outl(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG); in snd_emu10k1_init()
314 outl(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG); in snd_emu10k1_init()
316 outl(reg, emu->port + A_IOCFG); in snd_emu10k1_init()
318 unsigned int reg = inl(emu->port + HCFG); in snd_emu10k1_init()
319 outl(reg | HCFG_GPOUT2, emu->port + HCFG); in snd_emu10k1_init()
321 outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG); in snd_emu10k1_init()
323 outl(reg, emu->port + HCFG); in snd_emu10k1_init()
327 if (emu->card_capabilities->emu_model) { in snd_emu10k1_init()
329 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_init()
331 } else if (emu->audigy) { /* enable analog output */ in snd_emu10k1_init()
332 unsigned int reg = inl(emu->port + A_IOCFG); in snd_emu10k1_init()
333 outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG); in snd_emu10k1_init()
336 if (emu->address_mode == 0) { in snd_emu10k1_init()
338 outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG); in snd_emu10k1_init()
344 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu) in snd_emu10k1_audio_enable() argument
349 outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG); in snd_emu10k1_audio_enable()
352 if (emu->card_capabilities->emu_model) { in snd_emu10k1_audio_enable()
354 } else if (emu->card_capabilities->i2c_adc) { in snd_emu10k1_audio_enable()
356 } else if (emu->audigy) { in snd_emu10k1_audio_enable()
357 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
359 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */ in snd_emu10k1_audio_enable()
363 outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
364 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */ in snd_emu10k1_audio_enable()
366 outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
369 outl(inl(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG); in snd_emu10k1_audio_enable()
378 emu->tos_link = 0; in snd_emu10k1_audio_enable()
379 tmp = inl(emu->port + HCFG); in snd_emu10k1_audio_enable()
381 outl(tmp|0x800, emu->port + HCFG); in snd_emu10k1_audio_enable()
383 if (tmp != (inl(emu->port + HCFG) & ~0x800)) { in snd_emu10k1_audio_enable()
384 emu->tos_link = 1; in snd_emu10k1_audio_enable()
385 outl(tmp, emu->port + HCFG); in snd_emu10k1_audio_enable()
391 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE); in snd_emu10k1_audio_enable()
394 int snd_emu10k1_done(struct snd_emu10k1 *emu) in snd_emu10k1_done() argument
398 outl(0, emu->port + INTE); in snd_emu10k1_done()
404 snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0); in snd_emu10k1_done()
406 snd_emu10k1_ptr_write(emu, VTFT, ch, 0); in snd_emu10k1_done()
407 snd_emu10k1_ptr_write(emu, CVCF, ch, 0); in snd_emu10k1_done()
408 snd_emu10k1_ptr_write(emu, PTRX, ch, 0); in snd_emu10k1_done()
409 snd_emu10k1_ptr_write(emu, CPF, ch, 0); in snd_emu10k1_done()
413 snd_emu10k1_ptr_write(emu, MICBS, 0, 0); in snd_emu10k1_done()
414 snd_emu10k1_ptr_write(emu, MICBA, 0, 0); in snd_emu10k1_done()
415 snd_emu10k1_ptr_write(emu, FXBS, 0, 0); in snd_emu10k1_done()
416 snd_emu10k1_ptr_write(emu, FXBA, 0, 0); in snd_emu10k1_done()
417 snd_emu10k1_ptr_write(emu, FXWC, 0, 0); in snd_emu10k1_done()
418 snd_emu10k1_ptr_write(emu, ADCBS, 0, ADCBS_BUFSIZE_NONE); in snd_emu10k1_done()
419 snd_emu10k1_ptr_write(emu, ADCBA, 0, 0); in snd_emu10k1_done()
420 snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K); in snd_emu10k1_done()
421 snd_emu10k1_ptr_write(emu, TCB, 0, 0); in snd_emu10k1_done()
422 if (emu->audigy) in snd_emu10k1_done()
423 snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP); in snd_emu10k1_done()
425 snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_done()
428 snd_emu10k1_ptr_write(emu, CLIEL, 0, 0); in snd_emu10k1_done()
429 snd_emu10k1_ptr_write(emu, CLIEH, 0, 0); in snd_emu10k1_done()
430 snd_emu10k1_ptr_write(emu, SOLEL, 0, 0); in snd_emu10k1_done()
431 snd_emu10k1_ptr_write(emu, SOLEH, 0, 0); in snd_emu10k1_done()
434 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG); in snd_emu10k1_done()
435 snd_emu10k1_ptr_write(emu, PTB, 0, 0); in snd_emu10k1_done()
517 static void snd_emu10k1_ecard_write(struct snd_emu10k1 *emu, unsigned int value) in snd_emu10k1_ecard_write() argument
524 hc_port = emu->port + HCFG; in snd_emu10k1_ecard_write()
555 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 *emu, in snd_emu10k1_ecard_setadcgain() argument
561 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); in snd_emu10k1_ecard_setadcgain()
564 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN); in snd_emu10k1_ecard_setadcgain()
569 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA); in snd_emu10k1_ecard_setadcgain()
575 snd_emu10k1_ecard_write(emu, value); in snd_emu10k1_ecard_setadcgain()
576 snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK); in snd_emu10k1_ecard_setadcgain()
577 snd_emu10k1_ecard_write(emu, value); in snd_emu10k1_ecard_setadcgain()
580 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); in snd_emu10k1_ecard_setadcgain()
583 static int snd_emu10k1_ecard_init(struct snd_emu10k1 *emu) in snd_emu10k1_ecard_init() argument
588 emu->ecard_ctrl = EC_RAW_RUN_MODE | in snd_emu10k1_ecard_init()
594 hc_value = inl(emu->port + HCFG); in snd_emu10k1_ecard_init()
595 outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG); in snd_emu10k1_ecard_init()
596 inl(emu->port + HCFG); in snd_emu10k1_ecard_init()
599 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN); in snd_emu10k1_ecard_init()
602 snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN); in snd_emu10k1_ecard_init()
607 snd_emu10k1_wait(emu, 48000); in snd_emu10k1_ecard_init()
612 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN); in snd_emu10k1_ecard_init()
615 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl); in snd_emu10k1_ecard_init()
618 snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN); in snd_emu10k1_ecard_init()
623 static int snd_emu10k1_cardbus_init(struct snd_emu10k1 *emu) in snd_emu10k1_cardbus_init() argument
631 special_port = emu->port + 0x38; in snd_emu10k1_cardbus_init()
644 snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */ in snd_emu10k1_cardbus_init()
650 static int snd_emu1010_load_firmware_entry(struct snd_emu10k1 *emu, in snd_emu1010_load_firmware_entry() argument
668 spin_lock_irqsave(&emu->emu_lock, flags); in snd_emu1010_load_firmware_entry()
669 outl(0x00, emu->port + A_IOCFG); /* Set PGMN low for 1uS. */ in snd_emu1010_load_firmware_entry()
670 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
672 outl(0x80, emu->port + A_IOCFG); /* Leave bit 7 set during netlist setup. */ in snd_emu1010_load_firmware_entry()
673 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
682 outl(reg, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
683 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
684 outl(reg | 0x40, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
685 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
689 outl(0x10, emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
690 write_post = inl(emu->port + A_IOCFG); in snd_emu1010_load_firmware_entry()
691 spin_unlock_irqrestore(&emu->emu_lock, flags); in snd_emu1010_load_firmware_entry()
712 static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock, in snd_emu1010_load_firmware() argument
719 filename = firmware_names[emu->card_capabilities->emu_model][dock]; in snd_emu1010_load_firmware()
722 err = request_firmware(fw, filename, &emu->pci->dev); in snd_emu1010_load_firmware()
727 return snd_emu1010_load_firmware_entry(emu, *fw); in snd_emu1010_load_firmware()
732 struct snd_emu10k1 *emu; in emu1010_firmware_work() local
736 emu = container_of(work, struct snd_emu10k1, in emu1010_firmware_work()
738 if (emu->card->shutdown) in emu1010_firmware_work()
741 if (emu->suspend) in emu1010_firmware_work()
744 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp); /* IRQ Status */ in emu1010_firmware_work()
745 …snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); /* OPTIONS: Which cards are attached to t… in emu1010_firmware_work()
749 dev_info(emu->card->dev, in emu1010_firmware_work()
751 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, in emu1010_firmware_work()
753 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw); in emu1010_firmware_work()
757 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0); in emu1010_firmware_work()
758 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &tmp); in emu1010_firmware_work()
759 dev_info(emu->card->dev, in emu1010_firmware_work()
762 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp); in emu1010_firmware_work()
763 dev_info(emu->card->dev, in emu1010_firmware_work()
767 dev_info(emu->card->dev, in emu1010_firmware_work()
772 dev_info(emu->card->dev, in emu1010_firmware_work()
774 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp); in emu1010_firmware_work()
775 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2); in emu1010_firmware_work()
776 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2); in emu1010_firmware_work()
781 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); in emu1010_firmware_work()
782 } else if (!reg && emu->emu1010.last_reg) { in emu1010_firmware_work()
784 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n"); in emu1010_firmware_work()
786 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE); in emu1010_firmware_work()
790 emu->emu1010.last_reg = reg; in emu1010_firmware_work()
791 if (!emu->card->shutdown) in emu1010_firmware_work()
792 schedule_delayed_work(&emu->emu1010.firmware_work, in emu1010_firmware_work()
827 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu) in snd_emu10k1_emu1010_init() argument
833 dev_info(emu->card->dev, "emu1010: Special config.\n"); in snd_emu10k1_emu1010_init()
838 outl(0x0005a00c, emu->port + HCFG); in snd_emu10k1_emu1010_init()
843 outl(0x0005a004, emu->port + HCFG); in snd_emu10k1_emu1010_init()
847 outl(0x0005a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
851 outl(0x0005a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
854 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0); in snd_emu10k1_emu1010_init()
857 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); in snd_emu10k1_emu1010_init()
858 dev_dbg(emu->card->dev, "reg1 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
863 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0x02); in snd_emu10k1_emu1010_init()
865 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); in snd_emu10k1_emu1010_init()
866 dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
869 dev_info(emu->card->dev, in snd_emu10k1_emu1010_init()
873 dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
875 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware); in snd_emu10k1_emu1010_init()
877 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n"); in snd_emu10k1_emu1010_init()
882 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®); in snd_emu10k1_emu1010_init()
885 dev_info(emu->card->dev, in snd_emu10k1_emu1010_init()
891 dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n"); in snd_emu10k1_emu1010_init()
892 snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp); in snd_emu10k1_emu1010_init()
893 snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2); in snd_emu10k1_emu1010_init()
894 dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2); in snd_emu10k1_emu1010_init()
896 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON); in snd_emu10k1_emu1010_init()
898 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); in snd_emu10k1_emu1010_init()
899 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
900 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); in snd_emu10k1_emu1010_init()
901 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
902 snd_emu1010_fpga_read(emu, EMU_HANA_OPTICAL_TYPE, &tmp); in snd_emu10k1_emu1010_init()
907 emu->emu1010.optical_in = 1; /* IN_ADAT */ in snd_emu10k1_emu1010_init()
908 emu->emu1010.optical_out = 1; /* IN_ADAT */ in snd_emu10k1_emu1010_init()
910 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) | in snd_emu10k1_emu1010_init()
911 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0); in snd_emu10k1_emu1010_init()
912 snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp); in snd_emu10k1_emu1010_init()
913 snd_emu1010_fpga_read(emu, EMU_HANA_ADC_PADS, &tmp); in snd_emu10k1_emu1010_init()
915 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, 0x00); in snd_emu10k1_emu1010_init()
916 emu->emu1010.adc_pads = 0x00; in snd_emu10k1_emu1010_init()
917 snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp); in snd_emu10k1_emu1010_init()
919 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30); in snd_emu10k1_emu1010_init()
920 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12); in snd_emu10k1_emu1010_init()
921 snd_emu1010_fpga_read(emu, EMU_HANA_DAC_PADS, &tmp); in snd_emu10k1_emu1010_init()
923 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, 0x0f); in snd_emu10k1_emu1010_init()
924 emu->emu1010.dac_pads = 0x0f; in snd_emu10k1_emu1010_init()
925 snd_emu1010_fpga_read(emu, EMU_HANA_DOCK_MISC, &tmp); in snd_emu10k1_emu1010_init()
926 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30); in snd_emu10k1_emu1010_init()
927 snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp); in snd_emu10k1_emu1010_init()
929 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10); in snd_emu10k1_emu1010_init()
931 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19); in snd_emu10k1_emu1010_init()
933 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c); in snd_emu10k1_emu1010_init()
937 snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x00); in snd_emu10k1_emu1010_init()
939 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); in snd_emu10k1_emu1010_init()
940 dev_info(emu->card->dev, "emu1010: Card options3 = 0x%x\n", reg); in snd_emu10k1_emu1010_init()
942 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x00); in snd_emu10k1_emu1010_init()
944 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K); in snd_emu10k1_emu1010_init()
947 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12); in snd_emu10k1_emu1010_init()
951 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
953 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
955 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
957 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
962 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
964 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
966 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
968 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
970 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
972 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
974 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
976 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
981 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
983 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
985 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
987 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
989 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
991 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
993 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
995 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1002 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1004 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1006 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1008 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1010 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1012 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1014 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1016 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1021 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1023 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1025 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1027 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1029 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1031 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1033 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1035 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1037 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1039 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1041 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1043 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1048 snd_emu1010_fpga_link_dst_src_write(emu, 0x0100 + i, EMU_SRC_SILENCE); in snd_emu10k1_emu1010_init()
1052 snd_emu1010_fpga_link_dst_src_write(emu, 0x0200 + i, EMU_SRC_SILENCE); in snd_emu10k1_emu1010_init()
1056 snd_emu1010_fpga_link_dst_src_write(emu, 0x0300 + i, EMU_SRC_SILENCE); in snd_emu10k1_emu1010_init()
1060 snd_emu1010_fpga_link_dst_src_write(emu, EMU_DST_HANA_ADAT + i, EMU_SRC_SILENCE); in snd_emu10k1_emu1010_init()
1062 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1064 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1066 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1068 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1070 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1072 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1074 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x01); /* Unmute all */ in snd_emu10k1_emu1010_init()
1076 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp); in snd_emu10k1_emu1010_init()
1082 outl(0x0000a000, emu->port + HCFG); in snd_emu10k1_emu1010_init()
1087 outl(0x0000a001, emu->port + HCFG); in snd_emu10k1_emu1010_init()
1091 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &tmp); in snd_emu10k1_emu1010_init()
1092 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19); /* MIDI Route */ in snd_emu10k1_emu1010_init()
1093 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c); /* Unknown */ in snd_emu10k1_emu1010_init()
1094 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19); /* MIDI Route */ in snd_emu10k1_emu1010_init()
1095 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c); /* Unknown */ in snd_emu10k1_emu1010_init()
1096 snd_emu1010_fpga_read(emu, EMU_HANA_SPDIF_MODE, &tmp); in snd_emu10k1_emu1010_init()
1097 …snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10); /* SPDIF Format spdif (or 0x11 for aes/eb… in snd_emu10k1_emu1010_init()
1100 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1102 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1104 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1106 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1110 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1616) { in snd_emu10k1_emu1010_init()
1113 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1115 emu->emu1010.output_source[0] = 17; in snd_emu10k1_emu1010_init()
1116 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1118 emu->emu1010.output_source[1] = 18; in snd_emu10k1_emu1010_init()
1119 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1121 emu->emu1010.output_source[2] = 19; in snd_emu10k1_emu1010_init()
1122 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1124 emu->emu1010.output_source[3] = 20; in snd_emu10k1_emu1010_init()
1125 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1127 emu->emu1010.output_source[4] = 21; in snd_emu10k1_emu1010_init()
1128 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1130 emu->emu1010.output_source[5] = 22; in snd_emu10k1_emu1010_init()
1132 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1134 emu->emu1010.output_source[16] = 17; in snd_emu10k1_emu1010_init()
1135 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1137 emu->emu1010.output_source[17] = 18; in snd_emu10k1_emu1010_init()
1140 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1142 emu->emu1010.output_source[0] = 21; in snd_emu10k1_emu1010_init()
1143 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1145 emu->emu1010.output_source[1] = 22; in snd_emu10k1_emu1010_init()
1146 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1148 emu->emu1010.output_source[2] = 23; in snd_emu10k1_emu1010_init()
1149 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1151 emu->emu1010.output_source[3] = 24; in snd_emu10k1_emu1010_init()
1152 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1154 emu->emu1010.output_source[4] = 25; in snd_emu10k1_emu1010_init()
1155 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1157 emu->emu1010.output_source[5] = 26; in snd_emu10k1_emu1010_init()
1158 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1160 emu->emu1010.output_source[6] = 27; in snd_emu10k1_emu1010_init()
1161 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1163 emu->emu1010.output_source[7] = 28; in snd_emu10k1_emu1010_init()
1165 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1167 emu->emu1010.output_source[8] = 21; in snd_emu10k1_emu1010_init()
1168 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1170 emu->emu1010.output_source[9] = 22; in snd_emu10k1_emu1010_init()
1172 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1174 emu->emu1010.output_source[10] = 21; in snd_emu10k1_emu1010_init()
1175 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1177 emu->emu1010.output_source[11] = 22; in snd_emu10k1_emu1010_init()
1179 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1181 emu->emu1010.output_source[12] = 21; in snd_emu10k1_emu1010_init()
1182 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1184 emu->emu1010.output_source[13] = 22; in snd_emu10k1_emu1010_init()
1186 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1188 emu->emu1010.output_source[14] = 21; in snd_emu10k1_emu1010_init()
1189 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1191 emu->emu1010.output_source[15] = 22; in snd_emu10k1_emu1010_init()
1193 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1195 emu->emu1010.output_source[16] = 21; in snd_emu10k1_emu1010_init()
1196 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1198 emu->emu1010.output_source[17] = 22; in snd_emu10k1_emu1010_init()
1199 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1201 emu->emu1010.output_source[18] = 23; in snd_emu10k1_emu1010_init()
1202 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1204 emu->emu1010.output_source[19] = 24; in snd_emu10k1_emu1010_init()
1205 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1207 emu->emu1010.output_source[20] = 25; in snd_emu10k1_emu1010_init()
1208 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1210 emu->emu1010.output_source[21] = 26; in snd_emu10k1_emu1010_init()
1211 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1213 emu->emu1010.output_source[22] = 27; in snd_emu10k1_emu1010_init()
1214 snd_emu1010_fpga_link_dst_src_write(emu, in snd_emu10k1_emu1010_init()
1216 emu->emu1010.output_source[23] = 28; in snd_emu10k1_emu1010_init()
1222 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x0); /* Mute all */ in snd_emu10k1_emu1010_init()
1223 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x0); /* Default fallback clock 48kHz */ in snd_emu10k1_emu1010_init()
1225 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K); in snd_emu10k1_emu1010_init()
1227 emu->emu1010.internal_clock = 1; /* 48000 */ in snd_emu10k1_emu1010_init()
1228 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12); /* Set LEDs on Audio Dock */ in snd_emu10k1_emu1010_init()
1229 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x1); /* Unmute all */ in snd_emu10k1_emu1010_init()
1241 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
1242 static void free_pm_buffer(struct snd_emu10k1 *emu);
1247 struct snd_emu10k1 *emu = card->private_data; in snd_emu10k1_free() local
1249 if (emu->port) { /* avoid access to already used hardware */ in snd_emu10k1_free()
1250 snd_emu10k1_fx8010_tram_setup(emu, 0); in snd_emu10k1_free()
1251 snd_emu10k1_done(emu); in snd_emu10k1_free()
1252 snd_emu10k1_free_efx(emu); in snd_emu10k1_free()
1254 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) { in snd_emu10k1_free()
1256 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0); in snd_emu10k1_free()
1258 cancel_delayed_work_sync(&emu->emu1010.firmware_work); in snd_emu10k1_free()
1259 release_firmware(emu->firmware); in snd_emu10k1_free()
1260 release_firmware(emu->dock_fw); in snd_emu10k1_free()
1261 snd_util_memhdr_free(emu->memhdr); in snd_emu10k1_free()
1262 if (emu->silent_page.area) in snd_emu10k1_free()
1263 snd_dma_free_pages(&emu->silent_page); in snd_emu10k1_free()
1264 if (emu->ptb_pages.area) in snd_emu10k1_free()
1265 snd_dma_free_pages(&emu->ptb_pages); in snd_emu10k1_free()
1266 vfree(emu->page_ptr_table); in snd_emu10k1_free()
1267 vfree(emu->page_addr_table); in snd_emu10k1_free()
1269 free_pm_buffer(emu); in snd_emu10k1_free()
1748 static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu) in snd_emu10k1_detect_iommu() argument
1752 emu->iommu_workaround = false; in snd_emu10k1_detect_iommu()
1754 domain = iommu_get_domain_for_dev(emu->card->dev); in snd_emu10k1_detect_iommu()
1758 dev_notice(emu->card->dev, in snd_emu10k1_detect_iommu()
1760 emu->iommu_workaround = true; in snd_emu10k1_detect_iommu()
1771 struct snd_emu10k1 *emu = card->private_data; in snd_emu10k1_create() local
1785 emu->card = card; in snd_emu10k1_create()
1786 spin_lock_init(&emu->reg_lock); in snd_emu10k1_create()
1787 spin_lock_init(&emu->emu_lock); in snd_emu10k1_create()
1788 spin_lock_init(&emu->spi_lock); in snd_emu10k1_create()
1789 spin_lock_init(&emu->i2c_lock); in snd_emu10k1_create()
1790 spin_lock_init(&emu->voice_lock); in snd_emu10k1_create()
1791 spin_lock_init(&emu->synth_lock); in snd_emu10k1_create()
1792 spin_lock_init(&emu->memblk_lock); in snd_emu10k1_create()
1793 mutex_init(&emu->fx8010.lock); in snd_emu10k1_create()
1794 INIT_LIST_HEAD(&emu->mapped_link_head); in snd_emu10k1_create()
1795 INIT_LIST_HEAD(&emu->mapped_order_link_head); in snd_emu10k1_create()
1796 emu->pci = pci; in snd_emu10k1_create()
1797 emu->irq = -1; in snd_emu10k1_create()
1798 emu->synth = NULL; in snd_emu10k1_create()
1799 emu->get_synth_voice = NULL; in snd_emu10k1_create()
1800 INIT_DELAYED_WORK(&emu->emu1010.firmware_work, emu1010_firmware_work); in snd_emu10k1_create()
1802 emu->revision = pci->revision; in snd_emu10k1_create()
1803 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial); in snd_emu10k1_create()
1804 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model); in snd_emu10k1_create()
1807 pci->vendor, pci->device, emu->serial, emu->model); in snd_emu10k1_create()
1817 if (c->subsystem && (c->subsystem != emu->serial)) in snd_emu10k1_create()
1819 if (c->revision && c->revision != emu->revision) in snd_emu10k1_create()
1829 emu->card_capabilities = c; in snd_emu10k1_create()
1836 pci->vendor, pci->device, emu->serial, c->subsystem); in snd_emu10k1_create()
1841 emu->serial); in snd_emu10k1_create()
1846 is_audigy = emu->audigy = c->emu10k2_chip; in snd_emu10k1_create()
1848 snd_emu10k1_detect_iommu(emu); in snd_emu10k1_create()
1851 emu->address_mode = is_audigy ? 0 : 1; in snd_emu10k1_create()
1853 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK; in snd_emu10k1_create()
1854 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) { in snd_emu10k1_create()
1857 emu->dma_mask); in snd_emu10k1_create()
1861 emu->gpr_base = A_FXGPREGBASE; in snd_emu10k1_create()
1863 emu->gpr_base = FXGPREGBASE; in snd_emu10k1_create()
1868 emu->port = pci_resource_start(pci, 0); in snd_emu10k1_create()
1870 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; in snd_emu10k1_create()
1872 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 : in snd_emu10k1_create()
1874 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size, in snd_emu10k1_create()
1875 &emu->ptb_pages) < 0) in snd_emu10k1_create()
1878 (unsigned long)emu->ptb_pages.addr, in snd_emu10k1_create()
1879 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes)); in snd_emu10k1_create()
1881 emu->page_ptr_table = vmalloc(array_size(sizeof(void *), in snd_emu10k1_create()
1882 emu->max_cache_pages)); in snd_emu10k1_create()
1883 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long), in snd_emu10k1_create()
1884 emu->max_cache_pages)); in snd_emu10k1_create()
1885 if (!emu->page_ptr_table || !emu->page_addr_table) in snd_emu10k1_create()
1888 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE, in snd_emu10k1_create()
1889 &emu->silent_page) < 0) in snd_emu10k1_create()
1892 (unsigned long)emu->silent_page.addr, in snd_emu10k1_create()
1893 (unsigned long)(emu->silent_page.addr + in snd_emu10k1_create()
1894 emu->silent_page.bytes)); in snd_emu10k1_create()
1896 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE); in snd_emu10k1_create()
1897 if (!emu->memhdr) in snd_emu10k1_create()
1899 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) - in snd_emu10k1_create()
1904 emu->fx8010.fxbus_mask = 0x303f; in snd_emu10k1_create()
1909 emu->fx8010.extin_mask = extin_mask; in snd_emu10k1_create()
1910 emu->fx8010.extout_mask = extout_mask; in snd_emu10k1_create()
1911 emu->enable_ir = enable_ir; in snd_emu10k1_create()
1913 if (emu->card_capabilities->ca_cardbus_chip) { in snd_emu10k1_create()
1914 err = snd_emu10k1_cardbus_init(emu); in snd_emu10k1_create()
1918 if (emu->card_capabilities->ecard) { in snd_emu10k1_create()
1919 err = snd_emu10k1_ecard_init(emu); in snd_emu10k1_create()
1922 } else if (emu->card_capabilities->emu_model) { in snd_emu10k1_create()
1923 err = snd_emu10k1_emu1010_init(emu); in snd_emu10k1_create()
1929 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, in snd_emu10k1_create()
1934 emu->fx8010.itram_size = (16 * 1024)/2; in snd_emu10k1_create()
1935 emu->fx8010.etram_pages.area = NULL; in snd_emu10k1_create()
1936 emu->fx8010.etram_pages.bytes = 0; in snd_emu10k1_create()
1940 IRQF_SHARED, KBUILD_MODNAME, emu)) in snd_emu10k1_create()
1942 emu->irq = pci->irq; in snd_emu10k1_create()
1943 card->sync_irq = emu->irq; in snd_emu10k1_create()
1959 emu->spdif_bits[0] = emu->spdif_bits[1] = in snd_emu10k1_create()
1960 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 | in snd_emu10k1_create()
1966 memset(emu->silent_page.area, 0, emu->silent_page.bytes); in snd_emu10k1_create()
1967 silent_page = emu->silent_page.addr << emu->address_mode; in snd_emu10k1_create()
1968 pgtbl = (__le32 *)emu->ptb_pages.area; in snd_emu10k1_create()
1969 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++) in snd_emu10k1_create()
1974 emu->voices[idx].emu = emu; in snd_emu10k1_create()
1975 emu->voices[idx].number = idx; in snd_emu10k1_create()
1978 err = snd_emu10k1_init(emu, enable_ir, 0); in snd_emu10k1_create()
1982 err = alloc_pm_buffer(emu); in snd_emu10k1_create()
1988 err = snd_emu10k1_init_efx(emu); in snd_emu10k1_create()
1991 snd_emu10k1_audio_enable(emu); in snd_emu10k1_create()
1994 snd_emu10k1_proc_init(emu); in snd_emu10k1_create()
2015 static int alloc_pm_buffer(struct snd_emu10k1 *emu) in alloc_pm_buffer() argument
2020 if (emu->audigy) in alloc_pm_buffer()
2022 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size)); in alloc_pm_buffer()
2023 if (!emu->saved_ptr) in alloc_pm_buffer()
2025 if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0) in alloc_pm_buffer()
2027 if (emu->card_capabilities->ca0151_chip && in alloc_pm_buffer()
2028 snd_p16v_alloc_pm_buffer(emu) < 0) in alloc_pm_buffer()
2033 static void free_pm_buffer(struct snd_emu10k1 *emu) in free_pm_buffer() argument
2035 vfree(emu->saved_ptr); in free_pm_buffer()
2036 snd_emu10k1_efx_free_pm_buffer(emu); in free_pm_buffer()
2037 if (emu->card_capabilities->ca0151_chip) in free_pm_buffer()
2038 snd_p16v_free_pm_buffer(emu); in free_pm_buffer()
2041 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu) in snd_emu10k1_suspend_regs() argument
2047 val = emu->saved_ptr; in snd_emu10k1_suspend_regs()
2050 *val = snd_emu10k1_ptr_read(emu, *reg, i); in snd_emu10k1_suspend_regs()
2051 if (emu->audigy) { in snd_emu10k1_suspend_regs()
2054 *val = snd_emu10k1_ptr_read(emu, *reg, i); in snd_emu10k1_suspend_regs()
2056 if (emu->audigy) in snd_emu10k1_suspend_regs()
2057 emu->saved_a_iocfg = inl(emu->port + A_IOCFG); in snd_emu10k1_suspend_regs()
2058 emu->saved_hcfg = inl(emu->port + HCFG); in snd_emu10k1_suspend_regs()
2061 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu) in snd_emu10k1_resume_init() argument
2063 if (emu->card_capabilities->ca_cardbus_chip) in snd_emu10k1_resume_init()
2064 snd_emu10k1_cardbus_init(emu); in snd_emu10k1_resume_init()
2065 if (emu->card_capabilities->ecard) in snd_emu10k1_resume_init()
2066 snd_emu10k1_ecard_init(emu); in snd_emu10k1_resume_init()
2067 else if (emu->card_capabilities->emu_model) in snd_emu10k1_resume_init()
2068 snd_emu10k1_emu1010_init(emu); in snd_emu10k1_resume_init()
2070 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE); in snd_emu10k1_resume_init()
2071 snd_emu10k1_init(emu, emu->enable_ir, 1); in snd_emu10k1_resume_init()
2074 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu) in snd_emu10k1_resume_regs() argument
2080 snd_emu10k1_audio_enable(emu); in snd_emu10k1_resume_regs()
2083 if (emu->audigy) in snd_emu10k1_resume_regs()
2084 outl(emu->saved_a_iocfg, emu->port + A_IOCFG); in snd_emu10k1_resume_regs()
2085 outl(emu->saved_hcfg, emu->port + HCFG); in snd_emu10k1_resume_regs()
2087 val = emu->saved_ptr; in snd_emu10k1_resume_regs()
2090 snd_emu10k1_ptr_write(emu, *reg, i, *val); in snd_emu10k1_resume_regs()
2091 if (emu->audigy) { in snd_emu10k1_resume_regs()
2094 snd_emu10k1_ptr_write(emu, *reg, i, *val); in snd_emu10k1_resume_regs()