H A D | trident_main.c | 45 #include "trident.h" 48 static int snd_trident_pcm_mixer_build(struct snd_trident *trident, 51 static int snd_trident_pcm_mixer_free(struct snd_trident *trident, 55 static int snd_trident_sis_reset(struct snd_trident *trident); 57 static void snd_trident_clear_voices(struct snd_trident * trident, 59 static int snd_trident_free(struct snd_trident *trident); 67 static void snd_trident_print_voice_regs(struct snd_trident *trident, int voice) 71 dev_dbg(trident->card->dev, "Trident voice %i:\n", voice); 72 outb(voice, TRID_REG(trident, T4D_LFO_GC_CIR)); 73 val = inl(TRID_REG(trident, CH_LBA)); 74 dev_dbg(trident->card->dev, "LBA: 0x%x\n", val); 75 val = inl(TRID_REG(trident, CH_GVSEL_PAN_VOL_CTRL_EC)); 76 dev_dbg(trident->card->dev, "GVSel: %i\n", val >> 31); 77 dev_dbg(trident->card->dev, "Pan: 0x%x\n", (val >> 24) & 0x7f); 78 dev_dbg(trident->card->dev, "Vol: 0x%x\n", (val >> 16) & 0xff); 79 dev_dbg(trident->card->dev, "CTRL: 0x%x\n", (val >> 12) & 0x0f); 80 dev_dbg(trident->card->dev, "EC: 0x%x\n", val & 0x0fff); 81 if (trident->device != TRIDENT_DEVICE_ID_NX) { 82 val = inl(TRID_REG(trident, CH_DX_CSO_ALPHA_FMS)); 83 dev_dbg(trident->card->dev, "CSO: 0x%x\n", val >> 16); 84 dev_dbg(trident->card->dev, "Alpha: 0x%x\n", (val >> 4) & 0x0fff); 85 dev_dbg(trident->card->dev, "FMS: 0x%x\n", val & 0x0f); 86 val = inl(TRID_REG(trident, CH_DX_ESO_DELTA)); 87 dev_dbg(trident->card->dev, "ESO: 0x%x\n", val >> 16); 88 dev_dbg(trident->card->dev, "Delta: 0x%x\n", val & 0xffff); 89 val = inl(TRID_REG(trident, CH_DX_FMC_RVOL_CVOL)); 91 val = inl(TRID_REG(trident, CH_NX_DELTA_CSO)); 93 dev_dbg(trident->card->dev, "CSO: 0x%x\n", val & 0x00ffffff); 94 val = inl(TRID_REG(trident, CH_NX_DELTA_ESO)); 96 dev_dbg(trident->card->dev, "Delta: 0x%x\n", tmp); 97 dev_dbg(trident->card->dev, "ESO: 0x%x\n", val & 0x00ffffff); 98 val = inl(TRID_REG(trident, CH_NX_ALPHA_FMS_FMC_RVOL_CVOL)); 99 dev_dbg(trident->card->dev, "Alpha: 0x%x\n", val >> 20); 100 dev_dbg(trident->card->dev, "FMS: 0x%x\n", (val >> 16) & 0x0f); 102 dev_dbg(trident->card->dev, "FMC: 0x%x\n", (val >> 14) & 3); 103 dev_dbg(trident->card->dev, "RVol: 0x%x\n", (val >> 7) & 0x7f); 104 dev_dbg(trident->card->dev, "CVol: 0x%x\n", val & 0x7f); 125 struct snd_trident *trident = ac97->private_data; snd_trident_codec_read() local 127 spin_lock_irqsave(&trident->reg_lock, flags); snd_trident_codec_read() 128 if (trident->device == TRIDENT_DEVICE_ID_DX) { snd_trident_codec_read() 130 outl(data, TRID_REG(trident, DX_ACR1_AC97_R)); snd_trident_codec_read() 132 data = inl(TRID_REG(trident, DX_ACR1_AC97_R)); snd_trident_codec_read() 136 } else if (trident->device == TRIDENT_DEVICE_ID_NX) { snd_trident_codec_read() 139 outl(data, TRID_REG(trident, treg)); snd_trident_codec_read() 141 data = inl(TRID_REG(trident, treg)); snd_trident_codec_read() 145 } else if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_codec_read() 149 outl(data, TRID_REG(trident, SI_AC97_READ)); snd_trident_codec_read() 151 data = inl(TRID_REG(trident, SI_AC97_READ)); snd_trident_codec_read() 157 if (count == 0 && !trident->ac97_detect) { snd_trident_codec_read() 158 dev_err(trident->card->dev, snd_trident_codec_read() 164 spin_unlock_irqrestore(&trident->reg_lock, flags); snd_trident_codec_read() 188 struct snd_trident *trident = ac97->private_data; snd_trident_codec_write() local 192 spin_lock_irqsave(&trident->reg_lock, flags); snd_trident_codec_write() 193 if (trident->device == TRIDENT_DEVICE_ID_DX) { snd_trident_codec_write() 198 if ((inw(TRID_REG(trident, address)) & DX_AC97_BUSY_WRITE) == 0) snd_trident_codec_write() 203 } else if (trident->device == TRIDENT_DEVICE_ID_NX) { snd_trident_codec_write() 208 if ((inw(TRID_REG(trident, address)) & NX_AC97_BUSY_WRITE) == 0) snd_trident_codec_write() 213 } else if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_codec_write() 218 if ((inw(TRID_REG(trident, address)) & (SI_AC97_BUSY_WRITE)) == 0) snd_trident_codec_write() 231 spin_unlock_irqrestore(&trident->reg_lock, flags); snd_trident_codec_write() 234 outl(data, TRID_REG(trident, address)); snd_trident_codec_write() 235 spin_unlock_irqrestore(&trident->reg_lock, flags); snd_trident_codec_write() 239 void snd_trident_enable_eso(struct snd_trident *trident) 246 Parameters: trident - pointer to target device class for 4DWave. 250 static void snd_trident_enable_eso(struct snd_trident * trident) snd_trident_enable_eso() argument 254 val = inl(TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_enable_eso() 257 if (trident->device == TRIDENT_DEVICE_ID_SI7018) snd_trident_enable_eso() 259 outl(val, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_enable_eso() 263 void snd_trident_disable_eso(struct snd_trident *trident) 271 trident - pointer to target device class for 4DWave. 277 static void snd_trident_disable_eso(struct snd_trident * trident) snd_trident_disable_eso() argument 281 tmp = inl(TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_disable_eso() 284 outl(tmp, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_disable_eso() 288 void snd_trident_start_voice(struct snd_trident * trident, unsigned int voice) 295 trident - pointer to target device class for 4DWave. 301 void snd_trident_start_voice(struct snd_trident * trident, unsigned int voice) snd_trident_start_voice() argument 306 outl(mask, TRID_REG(trident, reg)); snd_trident_start_voice() 312 void snd_trident_stop_voice(struct snd_trident * trident, unsigned int voice) 319 trident - pointer to target device class for 4DWave. 325 void snd_trident_stop_voice(struct snd_trident * trident, unsigned int voice) snd_trident_stop_voice() argument 330 outl(mask, TRID_REG(trident, reg)); snd_trident_stop_voice() 336 int snd_trident_allocate_pcm_channel(struct snd_trident *trident) 340 Parameters : trident - pointer to target device class for 4DWave. 346 static int snd_trident_allocate_pcm_channel(struct snd_trident * trident) snd_trident_allocate_pcm_channel() argument 350 if (trident->ChanPCMcnt >= trident->ChanPCM) snd_trident_allocate_pcm_channel() 353 if (!(trident->ChanMap[T4D_BANK_B] & (1 << idx))) { snd_trident_allocate_pcm_channel() 354 trident->ChanMap[T4D_BANK_B] |= 1 << idx; snd_trident_allocate_pcm_channel() 355 trident->ChanPCMcnt++; snd_trident_allocate_pcm_channel() 367 Parameters : trident - pointer to target device class for 4DWave. 374 static void snd_trident_free_pcm_channel(struct snd_trident *trident, int channel) snd_trident_free_pcm_channel() argument 379 if (trident->ChanMap[T4D_BANK_B] & (1 << channel)) { snd_trident_free_pcm_channel() 380 trident->ChanMap[T4D_BANK_B] &= ~(1 << channel); snd_trident_free_pcm_channel() 381 trident->ChanPCMcnt--; snd_trident_free_pcm_channel() 390 Parameters : trident - pointer to target device class for 4DWave. 396 static int snd_trident_allocate_synth_channel(struct snd_trident * trident) snd_trident_allocate_synth_channel() argument 401 if (!(trident->ChanMap[T4D_BANK_A] & (1 << idx))) { snd_trident_allocate_synth_channel() 402 trident->ChanMap[T4D_BANK_A] |= 1 << idx; snd_trident_allocate_synth_channel() 403 trident->synth.ChanSynthCount++; snd_trident_allocate_synth_channel() 415 Parameters : trident - pointer to target device class for 4DWave. 422 static void snd_trident_free_synth_channel(struct snd_trident *trident, int channel) snd_trident_free_synth_channel() argument 427 if (trident->ChanMap[T4D_BANK_A] & (1 << channel)) { snd_trident_free_synth_channel() 428 trident->ChanMap[T4D_BANK_A] &= ~(1 << channel); snd_trident_free_synth_channel() 429 trident->synth.ChanSynthCount--; snd_trident_free_synth_channel() 439 Parameters: trident - pointer to target device class for 4DWave. 445 void snd_trident_write_voice_regs(struct snd_trident * trident, snd_trident_write_voice_regs() argument 459 switch (trident->device) { snd_trident_write_voice_regs() 492 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_voice_regs() 493 outl(regs[0], TRID_REG(trident, CH_START + 0)); snd_trident_write_voice_regs() 494 outl(regs[1], TRID_REG(trident, CH_START + 4)); snd_trident_write_voice_regs() 495 outl(regs[2], TRID_REG(trident, CH_START + 8)); snd_trident_write_voice_regs() 496 outl(regs[3], TRID_REG(trident, CH_START + 12)); snd_trident_write_voice_regs() 497 outl(regs[4], TRID_REG(trident, CH_START + 16)); snd_trident_write_voice_regs() 500 dev_dbg(trident->card->dev, "written %i channel:\n", voice->number); snd_trident_write_voice_regs() 501 dev_dbg(trident->card->dev, " regs[0] = 0x%x/0x%x\n", snd_trident_write_voice_regs() 502 regs[0], inl(TRID_REG(trident, CH_START + 0))); snd_trident_write_voice_regs() 503 dev_dbg(trident->card->dev, " regs[1] = 0x%x/0x%x\n", snd_trident_write_voice_regs() 504 regs[1], inl(TRID_REG(trident, CH_START + 4))); snd_trident_write_voice_regs() 505 dev_dbg(trident->card->dev, " regs[2] = 0x%x/0x%x\n", snd_trident_write_voice_regs() 506 regs[2], inl(TRID_REG(trident, CH_START + 8))); snd_trident_write_voice_regs() 507 dev_dbg(trident->card->dev, " regs[3] = 0x%x/0x%x\n", snd_trident_write_voice_regs() 508 regs[3], inl(TRID_REG(trident, CH_START + 12))); snd_trident_write_voice_regs() 509 dev_dbg(trident->card->dev, " regs[4] = 0x%x/0x%x\n", snd_trident_write_voice_regs() 510 regs[4], inl(TRID_REG(trident, CH_START + 16))); snd_trident_write_voice_regs() 522 Parameters: trident - pointer to target device class for 4DWave. 528 static void snd_trident_write_cso_reg(struct snd_trident * trident, snd_trident_write_cso_reg() argument 533 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_cso_reg() 534 if (trident->device != TRIDENT_DEVICE_ID_NX) { snd_trident_write_cso_reg() 535 outw(voice->CSO, TRID_REG(trident, CH_DX_CSO_ALPHA_FMS) + 2); snd_trident_write_cso_reg() 538 (voice->CSO & 0x00ffffff), TRID_REG(trident, CH_NX_DELTA_CSO)); snd_trident_write_cso_reg() 548 Parameters: trident - pointer to target device class for 4DWave. 554 static void snd_trident_write_eso_reg(struct snd_trident * trident, snd_trident_write_eso_reg() argument 559 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_eso_reg() 560 if (trident->device != TRIDENT_DEVICE_ID_NX) { snd_trident_write_eso_reg() 561 outw(voice->ESO, TRID_REG(trident, CH_DX_ESO_DELTA) + 2); snd_trident_write_eso_reg() 564 TRID_REG(trident, CH_NX_DELTA_ESO)); snd_trident_write_eso_reg() 574 Parameters: trident - pointer to target device class for 4DWave. 580 static void snd_trident_write_vol_reg(struct snd_trident * trident, snd_trident_write_vol_reg() argument 585 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_vol_reg() 586 switch (trident->device) { snd_trident_write_vol_reg() 589 outb(voice->Vol >> 2, TRID_REG(trident, CH_GVSEL_PAN_VOL_CTRL_EC + 2)); snd_trident_write_vol_reg() 592 /* dev_dbg(trident->card->dev, "voice->Vol = 0x%x\n", voice->Vol); */ snd_trident_write_vol_reg() 594 TRID_REG(trident, CH_GVSEL_PAN_VOL_CTRL_EC)); snd_trident_write_vol_reg() 605 Parameters: trident - pointer to target device class for 4DWave. 611 static void snd_trident_write_pan_reg(struct snd_trident * trident, snd_trident_write_pan_reg() argument 616 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_pan_reg() 618 TRID_REG(trident, CH_GVSEL_PAN_VOL_CTRL_EC + 3)); snd_trident_write_pan_reg() 627 Parameters: trident - pointer to target device class for 4DWave. 633 static void snd_trident_write_rvol_reg(struct snd_trident * trident, snd_trident_write_rvol_reg() argument 638 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_rvol_reg() 641 TRID_REG(trident, trident->device == TRIDENT_DEVICE_ID_NX ? snd_trident_write_rvol_reg() 651 Parameters: trident - pointer to target device class for 4DWave. 657 static void snd_trident_write_cvol_reg(struct snd_trident * trident, snd_trident_write_cvol_reg() argument 662 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_write_cvol_reg() 665 TRID_REG(trident, trident->device == TRIDENT_DEVICE_ID_NX ? snd_trident_write_cvol_reg() 674 Parameters: trident - pointer to target device class for 4DWave. 704 Parameters: trident - pointer to target device class for 4DWave. 734 Parameters: trident - pointer to target device class for 4DWave. 756 Parameters: trident - pointer to target device class for 4DWave. 802 trident hardware is unpredictable and interrupt generator snd_trident_ioctl() 822 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_allocate_pcm_mem() local 829 if (trident->tlb.entries) { snd_trident_allocate_pcm_mem() 832 snd_trident_free_pages(trident, voice->memblk); snd_trident_allocate_pcm_mem() 833 voice->memblk = snd_trident_alloc_pages(trident, substream); snd_trident_allocate_pcm_mem() 856 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_allocate_evoice() local 865 evoice = snd_trident_alloc_voice(trident, SNDRV_TRIDENT_VOICE_TYPE_PCM, 0, 0); snd_trident_allocate_evoice() 873 snd_trident_free_voice(trident, evoice); snd_trident_allocate_evoice() 917 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_hw_free() local 922 if (trident->tlb.entries) { snd_trident_hw_free() 924 snd_trident_free_pages(trident, voice->memblk); snd_trident_hw_free() 930 snd_trident_free_voice(trident, evoice); snd_trident_hw_free() 949 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_playback_prepare() local 953 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[substream->number]; snd_trident_playback_prepare() 955 spin_lock_irq(&trident->reg_lock); snd_trident_playback_prepare() 987 snd_trident_write_voice_regs(trident, voice); snd_trident_playback_prepare() 997 evoice->GVSel = trident->device == TRIDENT_DEVICE_ID_SI7018 ? 0 : 1; snd_trident_playback_prepare() 1010 snd_trident_write_voice_regs(trident, evoice); snd_trident_playback_prepare() 1016 spin_unlock_irq(&trident->reg_lock); snd_trident_playback_prepare() 1052 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_capture_prepare() local 1057 spin_lock_irq(&trident->reg_lock); snd_trident_capture_prepare() 1060 outb(0, TRID_REG(trident, LEGACY_DMAR15)); snd_trident_capture_prepare() 1063 outb(0x54, TRID_REG(trident, LEGACY_DMAR11)); snd_trident_capture_prepare() 1067 outl(voice->LBA, TRID_REG(trident, LEGACY_DMAR0)); snd_trident_capture_prepare() 1073 outb((ESO_bytes & 0x00ff0000) >> 16, TRID_REG(trident, LEGACY_DMAR6)); snd_trident_capture_prepare() 1074 outw((ESO_bytes & 0x0000ffff), TRID_REG(trident, LEGACY_DMAR4)); snd_trident_capture_prepare() 1079 outw(val, TRID_REG(trident, T4D_SBDELTA_DELTA_R)); snd_trident_capture_prepare() 1088 outl((val << 16) | val, TRID_REG(trident, T4D_SBBL_SBCL)); snd_trident_capture_prepare() 1092 trident->bDMAStart = 0x19; // 0001 1001b snd_trident_capture_prepare() 1095 trident->bDMAStart |= 0x80; snd_trident_capture_prepare() 1097 trident->bDMAStart |= 0x20; snd_trident_capture_prepare() 1099 trident->bDMAStart |= 0x40; snd_trident_capture_prepare() 1124 snd_trident_write_voice_regs(trident, voice); snd_trident_capture_prepare() 1126 spin_unlock_irq(&trident->reg_lock); snd_trident_capture_prepare() 1166 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_si7018_capture_hw_free() local 1173 snd_trident_free_voice(trident, evoice); snd_trident_si7018_capture_hw_free() 1192 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_si7018_capture_prepare() local 1197 spin_lock_irq(&trident->reg_lock); snd_trident_si7018_capture_prepare() 1222 snd_trident_write_voice_regs(trident, voice); snd_trident_si7018_capture_prepare() 1240 snd_trident_write_voice_regs(trident, evoice); snd_trident_si7018_capture_prepare() 1246 spin_unlock_irq(&trident->reg_lock); snd_trident_si7018_capture_prepare() 1263 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_foldback_prepare() local 1268 spin_lock_irq(&trident->reg_lock); snd_trident_foldback_prepare() 1297 outb(((voice->number & 0x3f) | 0x80), TRID_REG(trident, T4D_RCI + voice->foldback_chan)); snd_trident_foldback_prepare() 1299 snd_trident_write_voice_regs(trident, voice); snd_trident_foldback_prepare() 1309 evoice->GVSel = trident->device == TRIDENT_DEVICE_ID_SI7018 ? 0 : 1; snd_trident_foldback_prepare() 1317 snd_trident_write_voice_regs(trident, evoice); snd_trident_foldback_prepare() 1323 spin_unlock_irq(&trident->reg_lock); snd_trident_foldback_prepare() 1342 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_spdif_hw_params() local 1350 if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_hw_params() 1357 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_hw_params() 1358 old_bits = trident->spdif_pcm_bits; snd_trident_spdif_hw_params() 1360 trident->spdif_pcm_bits &= ~IEC958_AES0_PRO_FS; snd_trident_spdif_hw_params() 1362 trident->spdif_pcm_bits &= ~(IEC958_AES3_CON_FS << 24); snd_trident_spdif_hw_params() 1364 trident->spdif_pcm_ctrl = 0x3c; // 48000 Hz snd_trident_spdif_hw_params() 1365 trident->spdif_pcm_bits |= snd_trident_spdif_hw_params() 1366 trident->spdif_bits & IEC958_AES0_PROFESSIONAL ? snd_trident_spdif_hw_params() 1371 trident->spdif_pcm_ctrl = 0x3e; // 44100 Hz snd_trident_spdif_hw_params() 1372 trident->spdif_pcm_bits |= snd_trident_spdif_hw_params() 1373 trident->spdif_bits & IEC958_AES0_PROFESSIONAL ? snd_trident_spdif_hw_params() 1378 trident->spdif_pcm_ctrl = 0x3d; // 32000 Hz snd_trident_spdif_hw_params() 1379 trident->spdif_pcm_bits |= snd_trident_spdif_hw_params() 1380 trident->spdif_bits & IEC958_AES0_PROFESSIONAL ? snd_trident_spdif_hw_params() 1384 change = old_bits != trident->spdif_pcm_bits; snd_trident_spdif_hw_params() 1385 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_hw_params() 1388 snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE, &trident->spdif_pcm_ctl->id); snd_trident_spdif_hw_params() 1406 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_spdif_prepare() local 1410 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[substream->number]; snd_trident_spdif_prepare() 1414 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_prepare() 1416 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_prepare() 1454 snd_trident_write_voice_regs(trident, voice); snd_trident_spdif_prepare() 1456 outw((RESO & 0xffff), TRID_REG(trident, NX_SPESO)); snd_trident_spdif_prepare() 1457 outb((RESO >> 16), TRID_REG(trident, NX_SPESO + 2)); snd_trident_spdif_prepare() 1458 outl((LBAO & 0xfffffffc), TRID_REG(trident, NX_SPLBA)); snd_trident_spdif_prepare() 1459 outw((voice->CSO & 0xffff), TRID_REG(trident, NX_SPCTRL_SPCSO)); snd_trident_spdif_prepare() 1460 outb((voice->CSO >> 16), TRID_REG(trident, NX_SPCTRL_SPCSO + 2)); snd_trident_spdif_prepare() 1463 outb(trident->spdif_pcm_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); snd_trident_spdif_prepare() 1464 outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_spdif_prepare() 1493 snd_trident_write_voice_regs(trident, voice); snd_trident_spdif_prepare() 1503 evoice->GVSel = trident->device == TRIDENT_DEVICE_ID_SI7018 ? 0 : 1; snd_trident_spdif_prepare() 1511 snd_trident_write_voice_regs(trident, evoice); snd_trident_spdif_prepare() 1517 outl(trident->spdif_pcm_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_spdif_prepare() 1518 temp = inl(TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_spdif_prepare() 1520 outl(temp, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_spdif_prepare() 1521 temp = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_spdif_prepare() 1523 outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_spdif_prepare() 1526 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_prepare() 1547 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_trigger() local 1568 spin_lock(&trident->reg_lock); snd_trident_trigger() 1569 val = inl(TRID_REG(trident, T4D_STIMER)) & 0x00ffffff; snd_pcm_group_for_each_entry() 1571 if ((struct snd_trident *) snd_pcm_substream_chip(s) == trident) { snd_pcm_group_for_each_entry() 1597 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { 1598 outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS)); 1599 val = trident->spdif_pcm_ctrl; 1602 outb(val, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); 1604 outl(trident->spdif_pcm_bits, TRID_REG(trident, SI_SPDIF_CS)); 1605 val = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) | SPDIF_EN; 1606 outl(val, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); 1610 outl(what, TRID_REG(trident, T4D_STOP_B)); 1611 val = inl(TRID_REG(trident, T4D_AINTEN_B)); 1617 outl(val, TRID_REG(trident, T4D_AINTEN_B)); 1619 outl(what, TRID_REG(trident, T4D_START_B)); 1621 if (capture_flag && trident->device != TRIDENT_DEVICE_ID_SI7018) 1622 outb(trident->bDMAStart, TRID_REG(trident, T4D_SBCTRL_SBE2R_SBDD)); 1624 if (capture_flag && trident->device != TRIDENT_DEVICE_ID_SI7018) 1625 outb(0x00, TRID_REG(trident, T4D_SBCTRL_SBE2R_SBDD)); 1627 spin_unlock(&trident->reg_lock); 1644 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_playback_pointer() local 1652 spin_lock(&trident->reg_lock); snd_trident_playback_pointer() 1654 outb(voice->number, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_playback_pointer() 1656 if (trident->device != TRIDENT_DEVICE_ID_NX) { snd_trident_playback_pointer() 1657 cso = inw(TRID_REG(trident, CH_DX_CSO_ALPHA_FMS + 2)); snd_trident_playback_pointer() 1659 cso = (unsigned int) inl(TRID_REG(trident, CH_NX_DELTA_CSO)) & 0x00ffffff; snd_trident_playback_pointer() 1662 spin_unlock(&trident->reg_lock); snd_trident_playback_pointer() 1683 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_capture_pointer() local 1691 result = inw(TRID_REG(trident, T4D_SBBL_SBCL)); snd_trident_capture_pointer() 1713 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_spdif_pointer() local 1721 result = inl(TRID_REG(trident, NX_SPCTRL_SPCSO)) & 0x00ffffff; snd_trident_spdif_pointer() 1848 struct snd_trident *trident; snd_trident_pcm_free_substream() local 1851 trident = voice->trident; snd_trident_pcm_free_substream() 1852 snd_trident_free_voice(trident, voice); snd_trident_pcm_free_substream() 1858 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_playback_open() local 1862 voice = snd_trident_alloc_voice(trident, SNDRV_TRIDENT_VOICE_TYPE_PCM, 0, 0); snd_trident_playback_open() 1865 snd_trident_pcm_mixer_build(trident, voice, substream); snd_trident_playback_open() 1886 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_playback_close() local 1890 snd_trident_pcm_mixer_free(trident, voice, substream); snd_trident_playback_close() 1907 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_spdif_open() local 1911 voice = snd_trident_alloc_voice(trident, SNDRV_TRIDENT_VOICE_TYPE_PCM, 0, 0); snd_trident_spdif_open() 1916 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_open() 1917 trident->spdif_pcm_bits = trident->spdif_bits; snd_trident_spdif_open() 1918 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_open() 1922 if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_open() 1928 trident->spdif_pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_trident_spdif_open() 1929 snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE | snd_trident_spdif_open() 1930 SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id); snd_trident_spdif_open() 1948 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_spdif_close() local 1951 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_close() 1953 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_close() 1954 outb(trident->spdif_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); snd_trident_spdif_close() 1955 outl(trident->spdif_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_spdif_close() 1957 outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_spdif_close() 1958 temp = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_spdif_close() 1959 if (trident->spdif_ctrl) { snd_trident_spdif_close() 1964 outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_spdif_close() 1966 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_close() 1967 trident->spdif_pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_trident_spdif_close() 1968 snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE | snd_trident_spdif_close() 1969 SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id); snd_trident_spdif_close() 1986 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_capture_open() local 1990 voice = snd_trident_alloc_voice(trident, SNDRV_TRIDENT_VOICE_TYPE_PCM, 0, 0); snd_trident_capture_open() 2030 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_foldback_open() local 2034 voice = snd_trident_alloc_voice(trident, SNDRV_TRIDENT_VOICE_TYPE_PCM, 0, 0); snd_trident_foldback_open() 2057 struct snd_trident *trident = snd_pcm_substream_chip(substream); snd_trident_foldback_close() local 2063 spin_lock_irq(&trident->reg_lock); snd_trident_foldback_close() 2064 outb(0x00, TRID_REG(trident, T4D_RCI + voice->foldback_chan)); snd_trident_foldback_close() 2065 spin_unlock_irq(&trident->reg_lock); snd_trident_foldback_close() 2168 Parameters: trident - pointer to target device class for 4DWave. 2174 int snd_trident_pcm(struct snd_trident *trident, int device) snd_trident_pcm() argument 2179 if ((err = snd_pcm_new(trident->card, "trident_dx_nx", device, trident->ChanPCM, 1, &pcm)) < 0) snd_trident_pcm() 2182 pcm->private_data = trident; snd_trident_pcm() 2184 if (trident->tlb.entries) { snd_trident_pcm() 2190 trident->device != TRIDENT_DEVICE_ID_SI7018 ? snd_trident_pcm() 2197 trident->pcm = pcm; snd_trident_pcm() 2199 if (trident->tlb.entries) { snd_trident_pcm() 2203 snd_dma_pci_data(trident->pci), snd_trident_pcm() 2206 SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci), snd_trident_pcm() 2210 snd_dma_pci_data(trident->pci), 64*1024, 128*1024); snd_trident_pcm() 2221 Parameters: trident - pointer to target device class for 4DWave. 2227 int snd_trident_foldback_pcm(struct snd_trident *trident, int device) snd_trident_foldback_pcm() argument 2234 if (trident->device == TRIDENT_DEVICE_ID_NX) snd_trident_foldback_pcm() 2236 if ((err = snd_pcm_new(trident->card, "trident_dx_nx", device, 0, num_chan, &foldback)) < 0) snd_trident_foldback_pcm() 2239 foldback->private_data = trident; snd_trident_foldback_pcm() 2240 if (trident->tlb.entries) snd_trident_foldback_pcm() 2256 trident->foldback = foldback; snd_trident_foldback_pcm() 2258 if (trident->tlb.entries) snd_trident_foldback_pcm() 2260 snd_dma_pci_data(trident->pci), 0, 128*1024); snd_trident_foldback_pcm() 2263 snd_dma_pci_data(trident->pci), 64*1024, 128*1024); snd_trident_foldback_pcm() 2273 Parameters: trident - pointer to target device class for 4DWave-NX. 2279 int snd_trident_spdif_pcm(struct snd_trident *trident, int device) snd_trident_spdif_pcm() argument 2284 if ((err = snd_pcm_new(trident->card, "trident_dx_nx IEC958", device, 1, 0, &spdif)) < 0) snd_trident_spdif_pcm() 2287 spdif->private_data = trident; snd_trident_spdif_pcm() 2288 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_pcm() 2295 trident->spdif = spdif; snd_trident_spdif_pcm() 2297 snd_pcm_lib_preallocate_pages_for_all(spdif, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci), 64*1024, 128*1024); snd_trident_spdif_pcm() 2318 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_control_get() local 2321 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_control_get() 2322 val = trident->spdif_ctrl; snd_trident_spdif_control_get() 2324 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_control_get() 2331 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_control_put() local 2336 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_control_put() 2338 change = trident->spdif_ctrl != val; snd_trident_spdif_control_put() 2339 trident->spdif_ctrl = val; snd_trident_spdif_control_put() 2340 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_control_put() 2341 if ((inb(TRID_REG(trident, NX_SPCTRL_SPCSO + 3)) & 0x10) == 0) { snd_trident_spdif_control_put() 2342 outl(trident->spdif_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_spdif_control_put() 2343 outb(trident->spdif_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); snd_trident_spdif_control_put() 2346 if (trident->spdif == NULL) { snd_trident_spdif_control_put() 2348 outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_spdif_control_put() 2349 temp = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) & ~SPDIF_EN; snd_trident_spdif_control_put() 2352 outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_spdif_control_put() 2355 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_control_put() 2386 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_default_get() local 2388 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_default_get() 2389 ucontrol->value.iec958.status[0] = (trident->spdif_bits >> 0) & 0xff; snd_trident_spdif_default_get() 2390 ucontrol->value.iec958.status[1] = (trident->spdif_bits >> 8) & 0xff; snd_trident_spdif_default_get() 2391 ucontrol->value.iec958.status[2] = (trident->spdif_bits >> 16) & 0xff; snd_trident_spdif_default_get() 2392 ucontrol->value.iec958.status[3] = (trident->spdif_bits >> 24) & 0xff; snd_trident_spdif_default_get() 2393 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_default_get() 2400 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_default_put() local 2408 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_default_put() 2409 change = trident->spdif_bits != val; snd_trident_spdif_default_put() 2410 trident->spdif_bits = val; snd_trident_spdif_default_put() 2411 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_default_put() 2412 if ((inb(TRID_REG(trident, NX_SPCTRL_SPCSO + 3)) & 0x10) == 0) snd_trident_spdif_default_put() 2413 outl(trident->spdif_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_spdif_default_put() 2415 if (trident->spdif == NULL) snd_trident_spdif_default_put() 2416 outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_spdif_default_put() 2418 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_default_put() 2481 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_stream_get() local 2483 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_stream_get() 2484 ucontrol->value.iec958.status[0] = (trident->spdif_pcm_bits >> 0) & 0xff; snd_trident_spdif_stream_get() 2485 ucontrol->value.iec958.status[1] = (trident->spdif_pcm_bits >> 8) & 0xff; snd_trident_spdif_stream_get() 2486 ucontrol->value.iec958.status[2] = (trident->spdif_pcm_bits >> 16) & 0xff; snd_trident_spdif_stream_get() 2487 ucontrol->value.iec958.status[3] = (trident->spdif_pcm_bits >> 24) & 0xff; snd_trident_spdif_stream_get() 2488 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_stream_get() 2495 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_spdif_stream_put() local 2503 spin_lock_irq(&trident->reg_lock); snd_trident_spdif_stream_put() 2504 change = trident->spdif_pcm_bits != val; snd_trident_spdif_stream_put() 2505 trident->spdif_pcm_bits = val; snd_trident_spdif_stream_put() 2506 if (trident->spdif != NULL) { snd_trident_spdif_stream_put() 2507 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_spdif_stream_put() 2508 outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_spdif_stream_put() 2510 outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_spdif_stream_put() 2513 spin_unlock_irq(&trident->reg_lock); snd_trident_spdif_stream_put() 2538 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_ac97_control_get() local 2541 spin_lock_irq(&trident->reg_lock); snd_trident_ac97_control_get() 2542 val = trident->ac97_ctrl = inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_ac97_control_get() 2544 spin_unlock_irq(&trident->reg_lock); snd_trident_ac97_control_get() 2551 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_ac97_control_put() local 2555 spin_lock_irq(&trident->reg_lock); snd_trident_ac97_control_put() 2556 val = trident->ac97_ctrl = inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_ac97_control_put() 2560 change = val != trident->ac97_ctrl; snd_trident_ac97_control_put() 2561 trident->ac97_ctrl = val; snd_trident_ac97_control_put() 2562 outl(trident->ac97_ctrl = val, TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_ac97_control_put() 2563 spin_unlock_irq(&trident->reg_lock); snd_trident_ac97_control_put() 2596 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_vol_control_get() local 2599 val = trident->musicvol_wavevol; snd_trident_vol_control_get() 2610 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_vol_control_put() local 2614 spin_lock_irq(&trident->reg_lock); snd_trident_vol_control_put() 2615 val = trident->musicvol_wavevol; snd_trident_vol_control_put() 2619 change = val != trident->musicvol_wavevol; snd_trident_vol_control_put() 2620 outl(trident->musicvol_wavevol = val, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL)); snd_trident_vol_control_put() 2621 spin_unlock_irq(&trident->reg_lock); snd_trident_vol_control_put() 2656 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_vol_control_info() local 2662 if (trident->device == TRIDENT_DEVICE_ID_SI7018) snd_trident_pcm_vol_control_info() 2670 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_vol_control_get() local 2671 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_vol_control_get() 2673 if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_pcm_vol_control_get() 2684 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_vol_control_put() local 2685 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_vol_control_put() 2689 if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_pcm_vol_control_put() 2694 spin_lock_irq(&trident->reg_lock); snd_trident_pcm_vol_control_put() 2698 snd_trident_write_vol_reg(trident, mix->voice, val); snd_trident_pcm_vol_control_put() 2699 spin_unlock_irq(&trident->reg_lock); snd_trident_pcm_vol_control_put() 2734 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_pan_control_get() local 2735 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_pan_control_get() 2749 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_pan_control_put() local 2750 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_pan_control_put() 2758 spin_lock_irq(&trident->reg_lock); snd_trident_pcm_pan_control_put() 2762 snd_trident_write_pan_reg(trident, mix->voice, val); snd_trident_pcm_pan_control_put() 2763 spin_unlock_irq(&trident->reg_lock); snd_trident_pcm_pan_control_put() 2797 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_rvol_control_get() local 2798 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_rvol_control_get() 2807 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_rvol_control_put() local 2808 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_rvol_control_put() 2813 spin_lock_irq(&trident->reg_lock); snd_trident_pcm_rvol_control_put() 2817 snd_trident_write_rvol_reg(trident, mix->voice, val); snd_trident_pcm_rvol_control_put() 2818 spin_unlock_irq(&trident->reg_lock); snd_trident_pcm_rvol_control_put() 2855 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_cvol_control_get() local 2856 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_cvol_control_get() 2865 struct snd_trident *trident = snd_kcontrol_chip(kcontrol); snd_trident_pcm_cvol_control_put() local 2866 struct snd_trident_pcm_mixer *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; snd_trident_pcm_cvol_control_put() 2871 spin_lock_irq(&trident->reg_lock); snd_trident_pcm_cvol_control_put() 2875 snd_trident_write_cvol_reg(trident, mix->voice, val); snd_trident_pcm_cvol_control_put() 2876 spin_unlock_irq(&trident->reg_lock); snd_trident_pcm_cvol_control_put() 2909 static void snd_trident_notify_pcm_change(struct snd_trident *trident, snd_trident_notify_pcm_change() argument 2913 snd_trident_notify_pcm_change1(trident->card, trident->ctl_vol, num, activate); snd_trident_notify_pcm_change() 2914 snd_trident_notify_pcm_change1(trident->card, trident->ctl_pan, num, activate); snd_trident_notify_pcm_change() 2915 snd_trident_notify_pcm_change1(trident->card, trident->ctl_rvol, num, activate); snd_trident_notify_pcm_change() 2916 snd_trident_notify_pcm_change1(trident->card, trident->ctl_cvol, num, activate); snd_trident_notify_pcm_change() 2919 static int snd_trident_pcm_mixer_build(struct snd_trident *trident, snd_trident_pcm_mixer_build() argument 2925 if (snd_BUG_ON(!trident || !voice || !substream)) snd_trident_pcm_mixer_build() 2927 tmix = &trident->pcm_mixer[substream->number]; snd_trident_pcm_mixer_build() 2933 snd_trident_notify_pcm_change(trident, tmix, substream->number, 1); snd_trident_pcm_mixer_build() 2937 static int snd_trident_pcm_mixer_free(struct snd_trident *trident, struct snd_trident_voice *voice, struct snd_pcm_substream *substream) snd_trident_pcm_mixer_free() argument 2941 if (snd_BUG_ON(!trident || !substream)) snd_trident_pcm_mixer_free() 2943 tmix = &trident->pcm_mixer[substream->number]; snd_trident_pcm_mixer_free() 2945 snd_trident_notify_pcm_change(trident, tmix, substream->number, 0); snd_trident_pcm_mixer_free() 2954 Parameters: trident - pointer to target device class for 4DWave. 2960 static int snd_trident_mixer(struct snd_trident *trident, int pcm_spdif_device) snd_trident_mixer() argument 2963 struct snd_card *card = trident->card; snd_trident_mixer() 2976 if ((err = snd_ac97_bus(trident->card, 0, &ops, NULL, &trident->ac97_bus)) < 0) snd_trident_mixer() 2980 _ac97.private_data = trident; snd_trident_mixer() 2981 trident->ac97_detect = 1; snd_trident_mixer() 2984 if ((err = snd_ac97_mixer(trident->ac97_bus, &_ac97, &trident->ac97)) < 0) { snd_trident_mixer() 2985 if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_mixer() 2986 if ((err = snd_trident_sis_reset(trident)) < 0) snd_trident_mixer() 2996 if (trident->device == TRIDENT_DEVICE_ID_SI7018 && snd_trident_mixer() 2997 (inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) & SI_AC97_PRIMARY_READY) != 0) { snd_trident_mixer() 2999 err = snd_ac97_mixer(trident->ac97_bus, &_ac97, &trident->ac97_sec); snd_trident_mixer() 3001 dev_err(trident->card->dev, snd_trident_mixer() 3006 err = snd_ac97_modem(trident->card, &_ac97, &mc97); snd_trident_mixer() 3008 dev_err(trident->card->dev, snd_trident_mixer() 3014 trident->ac97_detect = 0; snd_trident_mixer() 3016 if (trident->device != TRIDENT_DEVICE_ID_SI7018) { snd_trident_mixer() 3017 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_vol_wave_control, trident))) < 0) snd_trident_mixer() 3020 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_vol_music_control, trident))) < 0) snd_trident_mixer() 3023 outl(trident->musicvol_wavevol = 0x00000000, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL)); snd_trident_mixer() 3025 outl(trident->musicvol_wavevol = 0xffff0000, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL)); snd_trident_mixer() 3031 tmix = &trident->pcm_mixer[idx]; snd_trident_mixer() 3034 if ((trident->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident)) == NULL) snd_trident_mixer() 3036 if ((err = snd_ctl_add(card, trident->ctl_vol))) snd_trident_mixer() 3039 if ((trident->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident)) == NULL) snd_trident_mixer() 3041 if ((err = snd_ctl_add(card, trident->ctl_pan))) snd_trident_mixer() 3044 if ((trident->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident)) == NULL) snd_trident_mixer() 3046 if ((err = snd_ctl_add(card, trident->ctl_rvol))) snd_trident_mixer() 3049 if ((trident->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident)) == NULL) snd_trident_mixer() 3051 if ((err = snd_ctl_add(card, trident->ctl_cvol))) snd_trident_mixer() 3054 if (trident->device == TRIDENT_DEVICE_ID_NX) { snd_trident_mixer() 3055 if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_ac97_rear_control, trident))) < 0) snd_trident_mixer() 3059 if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_mixer() 3061 kctl = snd_ctl_new1(&snd_trident_spdif_control, trident); snd_trident_mixer() 3066 if (trident->ac97->ext_id & AC97_EI_SPDIF) snd_trident_mixer() 3068 if (trident->ac97_sec && (trident->ac97_sec->ext_id & AC97_EI_SPDIF)) snd_trident_mixer() 3075 kctl = snd_ctl_new1(&snd_trident_spdif_default, trident); snd_trident_mixer() 3085 kctl = snd_ctl_new1(&snd_trident_spdif_mask, trident); snd_trident_mixer() 3095 kctl = snd_ctl_new1(&snd_trident_spdif_stream, trident); snd_trident_mixer() 3104 trident->spdif_pcm_ctl = kctl; snd_trident_mixer() 3232 static int snd_trident_sis_reset(struct snd_trident *trident) snd_trident_sis_reset() argument 3238 r = trident->in_suspend ? 0 : 2; /* count of retries */ snd_trident_sis_reset() 3240 pci_write_config_byte(trident->pci, 0x46, 0x04); /* SOFTWARE RESET */ snd_trident_sis_reset() 3242 pci_write_config_byte(trident->pci, 0x46, 0x00); snd_trident_sis_reset() 3245 outb(0x00, TRID_REG(trident, SI_AC97_GPIO)); snd_trident_sis_reset() 3248 outl(i, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_sis_reset() 3252 outl(i, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_sis_reset() 3257 if ((inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) & SI_AC97_PRIMARY_READY) != 0) snd_trident_sis_reset() 3259 do_delay(trident); snd_trident_sis_reset() 3261 dev_err(trident->card->dev, "AC'97 codec ready error [0x%x]\n", snd_trident_sis_reset() 3262 inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL))); snd_trident_sis_reset() 3266 do_delay(trident); snd_trident_sis_reset() 3273 if ((inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) & SI_AC97_SECONDARY_READY) != 0) snd_trident_sis_reset() 3275 do_delay(trident); snd_trident_sis_reset() 3278 outl(BANK_B_EN, TRID_REG(trident, T4D_LFO_GC_CIR)); snd_trident_sis_reset() 3289 struct snd_trident *trident = entry->private_data; snd_trident_proc_read() local 3292 switch (trident->device) { snd_trident_proc_read() 3306 snd_iprintf(buffer, "Spurious IRQs : %d\n", trident->spurious_irq_count); snd_trident_proc_read() 3307 snd_iprintf(buffer, "Spurious IRQ dlta: %d\n", trident->spurious_irq_max_delta); snd_trident_proc_read() 3308 if (trident->device == TRIDENT_DEVICE_ID_NX || trident->device == TRIDENT_DEVICE_ID_SI7018) snd_trident_proc_read() 3309 snd_iprintf(buffer, "IEC958 Mixer Out : %s\n", trident->spdif_ctrl == 0x28 ? "on" : "off"); snd_trident_proc_read() 3310 if (trident->device == TRIDENT_DEVICE_ID_NX) { snd_trident_proc_read() 3311 snd_iprintf(buffer, "Rear Speakers : %s\n", trident->ac97_ctrl & 0x00000010 ? "on" : "off"); snd_trident_proc_read() 3312 if (trident->tlb.entries) { snd_trident_proc_read() 3314 snd_iprintf(buffer, "Memory Maximum : %d\n", trident->tlb.memhdr->size); snd_trident_proc_read() 3315 snd_iprintf(buffer, "Memory Used : %d\n", trident->tlb.memhdr->used); snd_trident_proc_read() 3316 snd_iprintf(buffer, "Memory Free : %d\n", snd_util_mem_avail(trident->tlb.memhdr)); snd_trident_proc_read() 3321 static void snd_trident_proc_init(struct snd_trident *trident) snd_trident_proc_init() argument 3324 const char *s = "trident"; snd_trident_proc_init() 3326 if (trident->device == TRIDENT_DEVICE_ID_SI7018) snd_trident_proc_init() 3328 if (! snd_card_proc_new(trident->card, s, &entry)) snd_trident_proc_init() 3329 snd_info_set_text_ops(entry, trident, snd_trident_proc_read); snd_trident_proc_init() 3334 struct snd_trident *trident = device->device_data; snd_trident_dev_free() local 3335 return snd_trident_free(trident); snd_trident_dev_free() 3344 Parameters: trident - pointer to target device class for 4DWave. 3350 static int snd_trident_tlb_alloc(struct snd_trident *trident) snd_trident_tlb_alloc() argument 3357 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci), snd_trident_tlb_alloc() 3358 2 * SNDRV_TRIDENT_MAX_PAGES * 4, &trident->tlb.buffer) < 0) { snd_trident_tlb_alloc() 3359 dev_err(trident->card->dev, "unable to allocate TLB buffer\n"); snd_trident_tlb_alloc() 3362 trident->tlb.entries = (unsigned int*)ALIGN((unsigned long)trident->tlb.buffer.area, SNDRV_TRIDENT_MAX_PAGES * 4); snd_trident_tlb_alloc() 3363 trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4); snd_trident_tlb_alloc() 3365 trident->tlb.shadow_entries = vmalloc(SNDRV_TRIDENT_MAX_PAGES*sizeof(unsigned long)); snd_trident_tlb_alloc() 3366 if (trident->tlb.shadow_entries == NULL) { snd_trident_tlb_alloc() 3367 dev_err(trident->card->dev, snd_trident_tlb_alloc() 3372 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(trident->pci), snd_trident_tlb_alloc() 3373 SNDRV_TRIDENT_PAGE_SIZE, &trident->tlb.silent_page) < 0) { snd_trident_tlb_alloc() 3374 dev_err(trident->card->dev, "unable to allocate silent page\n"); snd_trident_tlb_alloc() 3377 memset(trident->tlb.silent_page.area, 0, SNDRV_TRIDENT_PAGE_SIZE); snd_trident_tlb_alloc() 3379 trident->tlb.entries[i] = cpu_to_le32(trident->tlb.silent_page.addr & ~(SNDRV_TRIDENT_PAGE_SIZE-1)); snd_trident_tlb_alloc() 3380 trident->tlb.shadow_entries[i] = (unsigned long)trident->tlb.silent_page.area; snd_trident_tlb_alloc() 3384 trident->tlb.memhdr = snd_util_memhdr_new(SNDRV_TRIDENT_PAGE_SIZE * SNDRV_TRIDENT_MAX_PAGES); snd_trident_tlb_alloc() 3385 if (trident->tlb.memhdr == NULL) snd_trident_tlb_alloc() 3388 trident->tlb.memhdr->block_extra_size = sizeof(struct snd_trident_memblk_arg); snd_trident_tlb_alloc() 3396 static void snd_trident_stop_all_voices(struct snd_trident *trident) snd_trident_stop_all_voices() argument 3398 outl(0xffffffff, TRID_REG(trident, T4D_STOP_A)); snd_trident_stop_all_voices() 3399 outl(0xffffffff, TRID_REG(trident, T4D_STOP_B)); snd_trident_stop_all_voices() 3400 outl(0, TRID_REG(trident, T4D_AINTEN_A)); snd_trident_stop_all_voices() 3401 outl(0, TRID_REG(trident, T4D_AINTEN_B)); snd_trident_stop_all_voices() 3404 static int snd_trident_4d_dx_init(struct snd_trident *trident) snd_trident_4d_dx_init() argument 3406 struct pci_dev *pci = trident->pci; snd_trident_4d_dx_init() 3419 outl(0x00000001, TRID_REG(trident, DX_ACR2_AC97_COM_STAT)); snd_trident_4d_dx_init() 3421 outl(0x00000000, TRID_REG(trident, DX_ACR2_AC97_COM_STAT)); snd_trident_4d_dx_init() 3423 trident->ac97_ctrl = 0x0000004a; snd_trident_4d_dx_init() 3424 outl(trident->ac97_ctrl, TRID_REG(trident, DX_ACR2_AC97_COM_STAT)); snd_trident_4d_dx_init() 3428 if ((inl(TRID_REG(trident, DX_ACR2_AC97_COM_STAT)) & 0x0010) != 0) snd_trident_4d_dx_init() 3430 do_delay(trident); snd_trident_4d_dx_init() 3432 dev_err(trident->card->dev, "AC'97 codec ready error\n"); snd_trident_4d_dx_init() 3436 snd_trident_stop_all_voices(trident); snd_trident_4d_dx_init() 3444 static int snd_trident_4d_nx_init(struct snd_trident *trident) snd_trident_4d_nx_init() argument 3446 struct pci_dev *pci = trident->pci; snd_trident_4d_nx_init() 3460 outl(0x00000001, TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_4d_nx_init() 3462 outl(0x00000000, TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_4d_nx_init() 3466 if ((inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT)) & 0x0008) != 0) snd_trident_4d_nx_init() 3468 do_delay(trident); snd_trident_4d_nx_init() 3470 dev_err(trident->card->dev, "AC'97 codec ready error [0x%x]\n", snd_trident_4d_nx_init() 3471 inl(TRID_REG(trident, NX_ACR0_AC97_COM_STAT))); snd_trident_4d_nx_init() 3476 trident->ac97_ctrl = 0x00000002; snd_trident_4d_nx_init() 3477 outl(trident->ac97_ctrl, TRID_REG(trident, NX_ACR0_AC97_COM_STAT)); snd_trident_4d_nx_init() 3479 outl(NX_SB_IRQ_DISABLE, TRID_REG(trident, T4D_MISCINT)); snd_trident_4d_nx_init() 3481 snd_trident_stop_all_voices(trident); snd_trident_4d_nx_init() 3483 if (trident->tlb.entries != NULL) { snd_trident_4d_nx_init() 3486 i = trident->tlb.entries_dmaaddr; snd_trident_4d_nx_init() 3488 outl(i, TRID_REG(trident, NX_TLBC)); snd_trident_4d_nx_init() 3490 outl(0, TRID_REG(trident, NX_TLBC)); snd_trident_4d_nx_init() 3493 outl(trident->spdif_bits, TRID_REG(trident, NX_SPCSTATUS)); snd_trident_4d_nx_init() 3494 outb(trident->spdif_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); snd_trident_4d_nx_init() 3502 static int snd_trident_sis_init(struct snd_trident *trident) snd_trident_sis_init() argument 3506 if ((err = snd_trident_sis_reset(trident)) < 0) snd_trident_sis_init() 3509 snd_trident_stop_all_voices(trident); snd_trident_sis_init() 3512 outl(trident->spdif_bits, TRID_REG(trident, SI_SPDIF_CS)); snd_trident_sis_init() 3540 struct snd_trident *trident; snd_trident_create() local 3562 trident = kzalloc(sizeof(*trident), GFP_KERNEL); snd_trident_create() 3563 if (trident == NULL) { snd_trident_create() 3567 trident->device = (pci->vendor << 16) | pci->device; snd_trident_create() 3568 trident->card = card; snd_trident_create() 3569 trident->pci = pci; snd_trident_create() 3570 spin_lock_init(&trident->reg_lock); snd_trident_create() 3571 spin_lock_init(&trident->event_lock); snd_trident_create() 3572 spin_lock_init(&trident->voice_alloc); snd_trident_create() 3577 trident->ChanPCM = pcm_streams; snd_trident_create() 3580 trident->synth.max_size = max_wavetable_size * 1024; snd_trident_create() 3581 trident->irq = -1; snd_trident_create() 3583 trident->midi_port = TRID_REG(trident, T4D_MPU401_BASE); snd_trident_create() 3587 kfree(trident); snd_trident_create() 3591 trident->port = pci_resource_start(pci, 0); snd_trident_create() 3594 KBUILD_MODNAME, trident)) { snd_trident_create() 3596 snd_trident_free(trident); snd_trident_create() 3599 trident->irq = pci->irq; snd_trident_create() 3602 trident->tlb.entries = NULL; snd_trident_create() 3603 trident->tlb.buffer.area = NULL; snd_trident_create() 3604 if (trident->device == TRIDENT_DEVICE_ID_NX) { snd_trident_create() 3605 if ((err = snd_trident_tlb_alloc(trident)) < 0) { snd_trident_create() 3606 snd_trident_free(trident); snd_trident_create() 3611 trident->spdif_bits = trident->spdif_pcm_bits = SNDRV_PCM_DEFAULT_CON_SPDIF; snd_trident_create() 3614 switch (trident->device) { snd_trident_create() 3616 err = snd_trident_4d_dx_init(trident); snd_trident_create() 3619 err = snd_trident_4d_nx_init(trident); snd_trident_create() 3622 err = snd_trident_sis_init(trident); snd_trident_create() 3629 snd_trident_free(trident); snd_trident_create() 3633 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, trident, &ops)) < 0) { snd_trident_create() 3634 snd_trident_free(trident); snd_trident_create() 3638 if ((err = snd_trident_mixer(trident, pcm_spdif_device)) < 0) snd_trident_create() 3643 voice = &trident->synth.voices[i]; snd_trident_create() 3645 voice->trident = trident; snd_trident_create() 3649 tmix = &trident->pcm_mixer[i]; snd_trident_create() 3656 snd_trident_enable_eso(trident); snd_trident_create() 3658 snd_trident_proc_init(trident); snd_trident_create() 3659 *rtrident = trident; snd_trident_create() 3669 Parameters: trident - device specific private data for 4DWave card 3675 static int snd_trident_free(struct snd_trident *trident) snd_trident_free() argument 3677 snd_trident_free_gameport(trident); snd_trident_free() 3678 snd_trident_disable_eso(trident); snd_trident_free() 3680 if (trident->device == TRIDENT_DEVICE_ID_NX) snd_trident_free() 3681 outb(0x00, TRID_REG(trident, NX_SPCTRL_SPCSO + 3)); snd_trident_free() 3682 else if (trident->device == TRIDENT_DEVICE_ID_SI7018) { snd_trident_free() 3683 outl(0, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); snd_trident_free() 3685 if (trident->irq >= 0) snd_trident_free() 3686 free_irq(trident->irq, trident); snd_trident_free() 3687 if (trident->tlb.buffer.area) { snd_trident_free() 3688 outl(0, TRID_REG(trident, NX_TLBC)); snd_trident_free() 3689 snd_util_memhdr_free(trident->tlb.memhdr); snd_trident_free() 3690 if (trident->tlb.silent_page.area) snd_trident_free() 3691 snd_dma_free_pages(&trident->tlb.silent_page); snd_trident_free() 3692 vfree(trident->tlb.shadow_entries); snd_trident_free() 3693 snd_dma_free_pages(&trident->tlb.buffer); snd_trident_free() 3695 pci_release_regions(trident->pci); snd_trident_free() 3696 pci_disable_device(trident->pci); snd_trident_free() 3697 kfree(trident); snd_trident_free() 3706 Parameters: trident - device specific private data for 4DWave card 3721 struct snd_trident *trident = dev_id; snd_trident_interrupt() local 3726 audio_int = inl(TRID_REG(trident, T4D_MISCINT)); snd_trident_interrupt() 3731 spin_lock(&trident->reg_lock); snd_trident_interrupt() 3732 stimer = inl(TRID_REG(trident, T4D_STIMER)) & 0x00ffffff; snd_trident_interrupt() 3733 chn_int = inl(TRID_REG(trident, T4D_AINT_A)); snd_trident_interrupt() 3736 outl(chn_int, TRID_REG(trident, T4D_AINT_A)); /* ack */ snd_trident_interrupt() 3738 chn_int = inl(TRID_REG(trident, T4D_AINT_B)); snd_trident_interrupt() 3745 voice = &trident->synth.voices[channel]; snd_trident_interrupt() 3747 outl(mask, TRID_REG(trident, T4D_STOP_B)); snd_trident_interrupt() 3755 trident->spurious_irq_count++; snd_trident_interrupt() 3756 if (trident->spurious_irq_max_delta < (unsigned int)delta) snd_trident_interrupt() 3757 trident->spurious_irq_max_delta = delta; snd_trident_interrupt() 3763 tmp = inw(TRID_REG(trident, T4D_SBBL_SBCL)); snd_trident_interrupt() 3764 if (trident->bDMAStart & 0x40) snd_trident_interrupt() 3769 tmp = inl(TRID_REG(trident, NX_SPCTRL_SPCSO)) & 0x00ffffff; snd_trident_interrupt() 3777 snd_trident_stop_voice(trident, voice->number); snd_trident_interrupt() 3778 snd_trident_write_eso_reg(trident, voice, tmp); snd_trident_interrupt() 3779 snd_trident_start_voice(trident, voice->number); snd_trident_interrupt() 3784 snd_trident_stop_voice(trident, voice->number); snd_trident_interrupt() 3785 snd_trident_write_cso_reg(trident, voice, voice->isync_mark); snd_trident_interrupt() 3786 snd_trident_write_eso_reg(trident, voice, voice->ESO); snd_trident_interrupt() 3787 snd_trident_start_voice(trident, voice->number); snd_trident_interrupt() 3792 snd_trident_stop_voice(trident, voice->extra->number); snd_trident_interrupt() 3793 snd_trident_write_cso_reg(trident, voice->extra, 0); snd_trident_interrupt() 3794 snd_trident_start_voice(trident, voice->extra->number); snd_trident_interrupt() 3797 spin_unlock(&trident->reg_lock); snd_trident_interrupt() 3799 spin_lock(&trident->reg_lock); snd_trident_interrupt() 3801 outl(chn_int, TRID_REG(trident, T4D_AINT_B)); /* ack */ snd_trident_interrupt() 3803 spin_unlock(&trident->reg_lock); snd_trident_interrupt() 3806 if (trident->rmidi) { snd_trident_interrupt() 3807 snd_mpu401_uart_interrupt(irq, trident->rmidi->private_data); snd_trident_interrupt() 3809 inb(TRID_REG(trident, T4D_MPUR0)); snd_trident_interrupt() 3812 // outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), TRID_REG(trident, T4D_MISCINT)); snd_trident_interrupt() 3816 struct snd_trident_voice *snd_trident_alloc_voice(struct snd_trident * trident, int type, int client, int port) snd_trident_alloc_voice() argument 3822 spin_lock_irqsave(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3824 idx = snd_trident_allocate_pcm_channel(trident); snd_trident_alloc_voice() 3826 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3829 pvoice = &trident->synth.voices[idx]; snd_trident_alloc_voice() 3836 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3840 idx = snd_trident_allocate_synth_channel(trident); snd_trident_alloc_voice() 3842 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3845 pvoice = &trident->synth.voices[idx]; snd_trident_alloc_voice() 3851 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3856 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_alloc_voice() 3862 void snd_trident_free_voice(struct snd_trident * trident, struct snd_trident_voice *voice) snd_trident_free_voice() argument 3869 snd_trident_clear_voices(trident, voice->number, voice->number); snd_trident_free_voice() 3870 spin_lock_irqsave(&trident->voice_alloc, flags); snd_trident_free_voice() 3875 snd_trident_free_pcm_channel(trident, voice->number); snd_trident_free_voice() 3877 snd_trident_free_synth_channel(trident, voice->number); snd_trident_free_voice() 3883 spin_unlock_irqrestore(&trident->voice_alloc, flags); snd_trident_free_voice() 3890 static void snd_trident_clear_voices(struct snd_trident * trident, unsigned short v_min, unsigned short v_max) snd_trident_clear_voices() argument 3899 outl(mask[0], TRID_REG(trident, T4D_STOP_A)); snd_trident_clear_voices() 3900 val = inl(TRID_REG(trident, T4D_AINTEN_A)); snd_trident_clear_voices() 3901 outl(val & ~mask[0], TRID_REG(trident, T4D_AINTEN_A)); snd_trident_clear_voices() 3904 outl(mask[1], TRID_REG(trident, T4D_STOP_B)); snd_trident_clear_voices() 3905 val = inl(TRID_REG(trident, T4D_AINTEN_B)); snd_trident_clear_voices() 3906 outl(val & ~mask[1], TRID_REG(trident, T4D_AINTEN_B)); snd_trident_clear_voices() 3914 struct snd_trident *trident = card->private_data; snd_trident_suspend() local 3916 trident->in_suspend = 1; snd_trident_suspend() 3918 snd_pcm_suspend_all(trident->pcm); snd_trident_suspend() 3919 snd_pcm_suspend_all(trident->foldback); snd_trident_suspend() 3920 snd_pcm_suspend_all(trident->spdif); snd_trident_suspend() 3922 snd_ac97_suspend(trident->ac97); snd_trident_suspend() 3923 snd_ac97_suspend(trident->ac97_sec); snd_trident_suspend() 3930 struct snd_trident *trident = card->private_data; snd_trident_resume() local 3932 switch (trident->device) { snd_trident_resume() 3934 snd_trident_4d_dx_init(trident); snd_trident_resume() 3937 snd_trident_4d_nx_init(trident); snd_trident_resume() 3940 snd_trident_sis_init(trident); snd_trident_resume() 3944 snd_ac97_resume(trident->ac97); snd_trident_resume() 3945 snd_ac97_resume(trident->ac97_sec); snd_trident_resume() 3948 outl(trident->musicvol_wavevol, TRID_REG(trident, T4D_MUSICVOL_WAVEVOL)); snd_trident_resume() 3950 snd_trident_enable_eso(trident); snd_trident_resume() 3953 trident->in_suspend = 0; snd_trident_resume()
|