Lines Matching refs:emu

37 static void snd_emu10k1_pcm_interrupt(struct snd_emu10k1 *emu,  in snd_emu10k1_pcm_interrupt()  argument
47 dev_dbg(emu->card->dev, in snd_emu10k1_pcm_interrupt()
49 epcm->substream->runtime->hw->pointer(emu, epcm->substream), in snd_emu10k1_pcm_interrupt()
56 static void snd_emu10k1_pcm_ac97adc_interrupt(struct snd_emu10k1 *emu, in snd_emu10k1_pcm_ac97adc_interrupt() argument
61 if (emu->pcm_capture_substream->runtime->mode == SNDRV_PCM_MODE_FRAME) in snd_emu10k1_pcm_ac97adc_interrupt()
65 snd_pcm_period_elapsed(emu->pcm_capture_substream); in snd_emu10k1_pcm_ac97adc_interrupt()
68 static void snd_emu10k1_pcm_ac97mic_interrupt(struct snd_emu10k1 *emu, in snd_emu10k1_pcm_ac97mic_interrupt() argument
73 if (emu->pcm_capture_mic_substream->runtime->mode == SNDRV_PCM_MODE_FRAME) in snd_emu10k1_pcm_ac97mic_interrupt()
77 snd_pcm_period_elapsed(emu->pcm_capture_mic_substream); in snd_emu10k1_pcm_ac97mic_interrupt()
80 static void snd_emu10k1_pcm_efx_interrupt(struct snd_emu10k1 *emu, in snd_emu10k1_pcm_efx_interrupt() argument
85 if (emu->pcm_capture_efx_substream->runtime->mode == SNDRV_PCM_MODE_FRAME) in snd_emu10k1_pcm_efx_interrupt()
89 snd_pcm_period_elapsed(emu->pcm_capture_efx_substream); in snd_emu10k1_pcm_efx_interrupt()
94 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_pointer() local
101 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_efx_playback_pointer()
114 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_pcm_channel_alloc()
126 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
130 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
140 epcm->voices[i] = &epcm->emu->voices[epcm->voices[0]->number + i]; in snd_emu10k1_pcm_channel_alloc()
145 err = snd_emu10k1_voice_alloc(epcm->emu, in snd_emu10k1_pcm_channel_alloc()
156 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_pcm_channel_alloc()
282 static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu, in snd_emu10k1_pcm_init_voice() argument
312 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_pcm_init_voice()
336 end_addr += ccis + emu->delay_pcm_irq; in snd_emu10k1_pcm_init_voice()
339 snd_emu10k1_ptr_write(emu, CPF, voice, CPF_STEREO_MASK); in snd_emu10k1_pcm_init_voice()
340 snd_emu10k1_ptr_write(emu, CPF, (voice + 1), CPF_STEREO_MASK); in snd_emu10k1_pcm_init_voice()
342 snd_emu10k1_ptr_write(emu, CPF, voice, 0); in snd_emu10k1_pcm_init_voice()
347 if (emu->audigy) { in snd_emu10k1_pcm_init_voice()
348 snd_emu10k1_ptr_write(emu, A_FXRT1, voice, in snd_emu10k1_pcm_init_voice()
350 snd_emu10k1_ptr_write(emu, A_FXRT2, voice, in snd_emu10k1_pcm_init_voice()
352 snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice, in snd_emu10k1_pcm_init_voice()
358 snd_emu10k1_ptr_write(emu, FXRT, voice, in snd_emu10k1_pcm_init_voice()
362 snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]); in snd_emu10k1_pcm_init_voice()
363 snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24)); in snd_emu10k1_pcm_init_voice()
364 snd_emu10k1_ptr_write(emu, PSST, voice, in snd_emu10k1_pcm_init_voice()
365 (start_addr + (extra ? emu->delay_pcm_irq : 0)) | in snd_emu10k1_pcm_init_voice()
367 if (emu->card_capabilities->emu_model) in snd_emu10k1_pcm_init_voice()
372 snd_emu10k1_ptr_write(emu, CCCA, voice, start_addr | in snd_emu10k1_pcm_init_voice()
376 snd_emu10k1_ptr_write(emu, CCCA, voice, (start_addr + ccis) | in snd_emu10k1_pcm_init_voice()
380 snd_emu10k1_ptr_write(emu, Z1, voice, 0); in snd_emu10k1_pcm_init_voice()
381 snd_emu10k1_ptr_write(emu, Z2, voice, 0); in snd_emu10k1_pcm_init_voice()
383 …silent_page = ((unsigned int)emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MA… in snd_emu10k1_pcm_init_voice()
384 snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page); in snd_emu10k1_pcm_init_voice()
385 snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page); in snd_emu10k1_pcm_init_voice()
387 snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff); in snd_emu10k1_pcm_init_voice()
388 snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff); in snd_emu10k1_pcm_init_voice()
389 snd_emu10k1_ptr_write(emu, ATKHLDM, voice, 0); in snd_emu10k1_pcm_init_voice()
390 snd_emu10k1_ptr_write(emu, DCYSUSM, voice, 0x007f); in snd_emu10k1_pcm_init_voice()
391 snd_emu10k1_ptr_write(emu, LFOVAL1, voice, 0x8000); in snd_emu10k1_pcm_init_voice()
392 snd_emu10k1_ptr_write(emu, LFOVAL2, voice, 0x8000); in snd_emu10k1_pcm_init_voice()
393 snd_emu10k1_ptr_write(emu, FMMOD, voice, 0); in snd_emu10k1_pcm_init_voice()
394 snd_emu10k1_ptr_write(emu, TREMFRQ, voice, 0); in snd_emu10k1_pcm_init_voice()
395 snd_emu10k1_ptr_write(emu, FM2FRQ2, voice, 0); in snd_emu10k1_pcm_init_voice()
396 snd_emu10k1_ptr_write(emu, ENVVAL, voice, 0x8000); in snd_emu10k1_pcm_init_voice()
398 snd_emu10k1_ptr_write(emu, ATKHLDV, voice, 0x7f7f); in snd_emu10k1_pcm_init_voice()
399 snd_emu10k1_ptr_write(emu, ENVVOL, voice, 0x0000); in snd_emu10k1_pcm_init_voice()
401 snd_emu10k1_ptr_write(emu, PEFE_FILTERAMOUNT, voice, 0x7f); in snd_emu10k1_pcm_init_voice()
403 snd_emu10k1_ptr_write(emu, PEFE_PITCHAMOUNT, voice, 0); in snd_emu10k1_pcm_init_voice()
405 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_pcm_init_voice()
411 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_hw_params() local
423 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_params()
424 epcm->memblk = snd_emu10k1_alloc_pages(emu, substream); in snd_emu10k1_playback_hw_params()
438 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_hw_free() local
446 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_playback_hw_free()
450 snd_emu10k1_voice_free(epcm->emu, epcm->voices[1]); in snd_emu10k1_playback_hw_free()
454 snd_emu10k1_voice_free(epcm->emu, epcm->voices[0]); in snd_emu10k1_playback_hw_free()
458 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_playback_hw_free()
468 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_hw_free() local
477 snd_emu10k1_voice_free(epcm->emu, epcm->extra); in snd_emu10k1_efx_playback_hw_free()
482 snd_emu10k1_voice_free(epcm->emu, epcm->voices[i]); in snd_emu10k1_efx_playback_hw_free()
487 snd_emu10k1_free_pages(emu, epcm->memblk); in snd_emu10k1_efx_playback_hw_free()
497 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_prepare() local
509 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_playback_prepare()
513 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_playback_prepare()
515 &emu->pcm_mixer[substream->number]); in snd_emu10k1_playback_prepare()
517 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[1], in snd_emu10k1_playback_prepare()
519 &emu->pcm_mixer[substream->number]); in snd_emu10k1_playback_prepare()
525 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_prepare() local
540 snd_emu10k1_pcm_init_voice(emu, 1, 1, epcm->extra, in snd_emu10k1_efx_playback_prepare()
544 snd_emu10k1_pcm_init_voice(emu, 1, 0, epcm->voices[0], in snd_emu10k1_efx_playback_prepare()
546 &emu->efx_pcm_mixer[0]); in snd_emu10k1_efx_playback_prepare()
550 snd_emu10k1_pcm_init_voice(emu, 0, 0, epcm->voices[i], in snd_emu10k1_efx_playback_prepare()
552 &emu->efx_pcm_mixer[i]); in snd_emu10k1_efx_playback_prepare()
592 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_prepare() local
598 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_prepare()
601 snd_emu10k1_ptr_write(emu, ADCCR, 0, 0); in snd_emu10k1_capture_prepare()
604 if (emu->audigy) { in snd_emu10k1_capture_prepare()
605 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0); in snd_emu10k1_capture_prepare()
606 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0); in snd_emu10k1_capture_prepare()
608 snd_emu10k1_ptr_write(emu, FXWC, 0, 0); in snd_emu10k1_capture_prepare()
613 snd_emu10k1_ptr_write(emu, epcm->capture_ba_reg, 0, runtime->dma_addr); in snd_emu10k1_capture_prepare()
627 epcm->capture_cr_val = emu->audigy ? A_ADCCR_LCHANENABLE : ADCCR_LCHANENABLE; in snd_emu10k1_capture_prepare()
629 epcm->capture_cr_val |= emu->audigy ? A_ADCCR_RCHANENABLE : ADCCR_RCHANENABLE; in snd_emu10k1_capture_prepare()
630 epcm->capture_cr_val |= emu->audigy ? in snd_emu10k1_capture_prepare()
637 static void snd_emu10k1_playback_invalidate_cache(struct snd_emu10k1 *emu, int extra, struct snd_em… in snd_emu10k1_playback_invalidate_cache() argument
653 snd_emu10k1_ptr_write(emu, CD0 + i, voice, sample); in snd_emu10k1_playback_invalidate_cache()
655 snd_emu10k1_ptr_write(emu, CD0 + i, voice + 1, sample); in snd_emu10k1_playback_invalidate_cache()
659 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice, 0); in snd_emu10k1_playback_invalidate_cache()
660 snd_emu10k1_ptr_write(emu, CCR_READADDRESS, voice, cra); in snd_emu10k1_playback_invalidate_cache()
662 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice + 1, 0); in snd_emu10k1_playback_invalidate_cache()
663 snd_emu10k1_ptr_write(emu, CCR_READADDRESS, voice + 1, cra); in snd_emu10k1_playback_invalidate_cache()
666 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice, ccis); in snd_emu10k1_playback_invalidate_cache()
668 snd_emu10k1_ptr_write(emu, CCR_CACHEINVALIDSIZE, voice+1, ccis); in snd_emu10k1_playback_invalidate_cache()
672 static void snd_emu10k1_playback_prepare_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *e… in snd_emu10k1_playback_prepare_voice() argument
690 snd_emu10k1_ptr_write(emu, IFATN, voice, attn); in snd_emu10k1_playback_prepare_voice()
691 snd_emu10k1_ptr_write(emu, VTFT, voice, vattn | 0xffff); in snd_emu10k1_playback_prepare_voice()
692 snd_emu10k1_ptr_write(emu, CVCF, voice, vattn | 0xffff); in snd_emu10k1_playback_prepare_voice()
693 snd_emu10k1_ptr_write(emu, DCYSUSV, voice, 0x7f7f); in snd_emu10k1_playback_prepare_voice()
694 snd_emu10k1_voice_clear_loop_stop(emu, voice); in snd_emu10k1_playback_prepare_voice()
697 static void snd_emu10k1_playback_trigger_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *e… in snd_emu10k1_playback_trigger_voice() argument
710 if (emu->card_capabilities->emu_model) in snd_emu10k1_playback_trigger_voice()
714 snd_emu10k1_ptr_write(emu, PTRX_PITCHTARGET, voice, pitch_target); in snd_emu10k1_playback_trigger_voice()
716 snd_emu10k1_ptr_write(emu, CPF_CURRENTPITCH, voice, pitch_target); in snd_emu10k1_playback_trigger_voice()
717 snd_emu10k1_ptr_write(emu, IP, voice, pitch); in snd_emu10k1_playback_trigger_voice()
719 snd_emu10k1_voice_intr_enable(emu, voice); in snd_emu10k1_playback_trigger_voice()
722 static void snd_emu10k1_playback_stop_voice(struct snd_emu10k1 *emu, struct snd_emu10k1_voice *evoi… in snd_emu10k1_playback_stop_voice() argument
729 snd_emu10k1_voice_intr_disable(emu, voice); in snd_emu10k1_playback_stop_voice()
730 snd_emu10k1_ptr_write(emu, PTRX_PITCHTARGET, voice, 0); in snd_emu10k1_playback_stop_voice()
731 snd_emu10k1_ptr_write(emu, CPF_CURRENTPITCH, voice, 0); in snd_emu10k1_playback_stop_voice()
732 snd_emu10k1_ptr_write(emu, IFATN, voice, 0xffff); in snd_emu10k1_playback_stop_voice()
733 snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff); in snd_emu10k1_playback_stop_voice()
734 snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff); in snd_emu10k1_playback_stop_voice()
735 snd_emu10k1_ptr_write(emu, IP, voice, 0); in snd_emu10k1_playback_stop_voice()
738 static inline void snd_emu10k1_playback_mangle_extra(struct snd_emu10k1 *emu, in snd_emu10k1_playback_mangle_extra() argument
749 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->extra->number); in snd_emu10k1_playback_mangle_extra()
752 snd_emu10k1_ptr_write(emu, CCCA, epcm->extra->number, ptr); in snd_emu10k1_playback_mangle_extra()
758 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_trigger() local
769 spin_lock(&emu->reg_lock); in snd_emu10k1_playback_trigger()
772 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); /* do we need this? */ in snd_emu10k1_playback_trigger()
773 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[0]); in snd_emu10k1_playback_trigger()
778 snd_emu10k1_playback_mangle_extra(emu, epcm, substream, runtime); in snd_emu10k1_playback_trigger()
779 mix = &emu->pcm_mixer[substream->number]; in snd_emu10k1_playback_trigger()
780 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 1, 0, mix); in snd_emu10k1_playback_trigger()
781 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[1], 0, 0, mix); in snd_emu10k1_playback_trigger()
782 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_playback_trigger()
783 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 1, 0); in snd_emu10k1_playback_trigger()
784 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[1], 0, 0); in snd_emu10k1_playback_trigger()
785 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_playback_trigger()
792 snd_emu10k1_playback_stop_voice(emu, epcm->voices[0]); in snd_emu10k1_playback_trigger()
793 snd_emu10k1_playback_stop_voice(emu, epcm->voices[1]); in snd_emu10k1_playback_trigger()
794 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_playback_trigger()
800 spin_unlock(&emu->reg_lock); in snd_emu10k1_playback_trigger()
807 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_trigger() local
812 spin_lock(&emu->reg_lock); in snd_emu10k1_capture_trigger()
817 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
818 snd_emu10k1_intr_enable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
825 snd_emu10k1_ptr_write(emu, ADCCR, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
828 if (emu->audigy) { in snd_emu10k1_capture_trigger()
829 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
830 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, epcm->capture_cr_val2); in snd_emu10k1_capture_trigger()
831 dev_dbg(emu->card->dev, in snd_emu10k1_capture_trigger()
836 snd_emu10k1_ptr_write(emu, FXWC, 0, epcm->capture_cr_val); in snd_emu10k1_capture_trigger()
841 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, epcm->capture_bs_val); in snd_emu10k1_capture_trigger()
848 snd_emu10k1_intr_disable(emu, epcm->capture_inte); in snd_emu10k1_capture_trigger()
849 outl(epcm->capture_ipr, emu->port + IPR); in snd_emu10k1_capture_trigger()
850 snd_emu10k1_ptr_write(emu, epcm->capture_bs_reg, 0, 0); in snd_emu10k1_capture_trigger()
853 snd_emu10k1_ptr_write(emu, ADCCR, 0, 0); in snd_emu10k1_capture_trigger()
856 if (emu->audigy) { in snd_emu10k1_capture_trigger()
857 snd_emu10k1_ptr_write(emu, A_FXWC1, 0, 0); in snd_emu10k1_capture_trigger()
858 snd_emu10k1_ptr_write(emu, A_FXWC2, 0, 0); in snd_emu10k1_capture_trigger()
860 snd_emu10k1_ptr_write(emu, FXWC, 0, 0); in snd_emu10k1_capture_trigger()
869 spin_unlock(&emu->reg_lock); in snd_emu10k1_capture_trigger()
875 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_pointer() local
882 ptr = snd_emu10k1_ptr_read(emu, CCCA, epcm->voices[0]->number) & 0x00ffffff; in snd_emu10k1_playback_pointer()
909 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_trigger() local
915 spin_lock(&emu->reg_lock); in snd_emu10k1_efx_playback_trigger()
920 snd_emu10k1_playback_invalidate_cache(emu, 0, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
922 snd_emu10k1_playback_invalidate_cache(emu, 1, epcm->extra); in snd_emu10k1_efx_playback_trigger()
927 snd_emu10k1_playback_prepare_voice(emu, epcm->extra, 1, 1, NULL); in snd_emu10k1_efx_playback_trigger()
928 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[0], 0, 0, in snd_emu10k1_efx_playback_trigger()
929 &emu->efx_pcm_mixer[0]); in snd_emu10k1_efx_playback_trigger()
931 snd_emu10k1_playback_prepare_voice(emu, epcm->voices[i], 0, 0, in snd_emu10k1_efx_playback_trigger()
932 &emu->efx_pcm_mixer[i]); in snd_emu10k1_efx_playback_trigger()
933 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[0], 0, 0); in snd_emu10k1_efx_playback_trigger()
934 snd_emu10k1_playback_trigger_voice(emu, epcm->extra, 1, 1); in snd_emu10k1_efx_playback_trigger()
936 snd_emu10k1_playback_trigger_voice(emu, epcm->voices[i], 0, 0); in snd_emu10k1_efx_playback_trigger()
944 snd_emu10k1_playback_stop_voice(emu, epcm->voices[i]); in snd_emu10k1_efx_playback_trigger()
946 snd_emu10k1_playback_stop_voice(emu, epcm->extra); in snd_emu10k1_efx_playback_trigger()
952 spin_unlock(&emu->reg_lock); in snd_emu10k1_efx_playback_trigger()
959 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_pointer() local
970 ptr = snd_emu10k1_ptr_read(emu, epcm->capture_idx_reg, 0) & 0x0000ffff; in snd_emu10k1_capture_pointer()
1048 static void snd_emu10k1_pcm_mixer_notify1(struct snd_emu10k1 *emu, struct snd_kcontrol *kctl, int i… in snd_emu10k1_pcm_mixer_notify1() argument
1058 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE | in snd_emu10k1_pcm_mixer_notify1()
1063 static void snd_emu10k1_pcm_mixer_notify(struct snd_emu10k1 *emu, int idx, int activate) in snd_emu10k1_pcm_mixer_notify() argument
1065 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_routing, idx, activate); in snd_emu10k1_pcm_mixer_notify()
1066 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_volume, idx, activate); in snd_emu10k1_pcm_mixer_notify()
1067 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_attn, idx, activate); in snd_emu10k1_pcm_mixer_notify()
1070 static void snd_emu10k1_pcm_efx_mixer_notify(struct snd_emu10k1 *emu, int idx, int activate) in snd_emu10k1_pcm_efx_mixer_notify() argument
1072 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_send_routing, idx, activate); in snd_emu10k1_pcm_efx_mixer_notify()
1073 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_send_volume, idx, activate); in snd_emu10k1_pcm_efx_mixer_notify()
1074 snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_efx_attn, idx, activate); in snd_emu10k1_pcm_efx_mixer_notify()
1084 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_close() local
1089 mix = &emu->efx_pcm_mixer[i]; in snd_emu10k1_efx_playback_close()
1091 snd_emu10k1_pcm_efx_mixer_notify(emu, i, 0); in snd_emu10k1_efx_playback_close()
1098 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_efx_playback_open() local
1107 epcm->emu = emu; in snd_emu10k1_efx_playback_open()
1111 emu->pcm_playback_efx_substream = substream; in snd_emu10k1_efx_playback_open()
1118 mix = &emu->efx_pcm_mixer[i]; in snd_emu10k1_efx_playback_open()
1124 snd_emu10k1_pcm_efx_mixer_notify(emu, i, 1); in snd_emu10k1_efx_playback_open()
1131 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_open() local
1140 epcm->emu = emu; in snd_emu10k1_playback_open()
1154 if (emu->card_capabilities->emu_model && emu->emu1010.internal_clock == 0) in snd_emu10k1_playback_open()
1163 mix = &emu->pcm_mixer[substream->number]; in snd_emu10k1_playback_open()
1171 snd_emu10k1_pcm_mixer_notify(emu, substream->number, 1); in snd_emu10k1_playback_open()
1177 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_playback_close() local
1178 struct snd_emu10k1_pcm_mixer *mix = &emu->pcm_mixer[substream->number]; in snd_emu10k1_playback_close()
1181 snd_emu10k1_pcm_mixer_notify(emu, substream->number, 0); in snd_emu10k1_playback_close()
1187 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_open() local
1194 epcm->emu = emu; in snd_emu10k1_capture_open()
1201 epcm->capture_idx_reg = emu->audigy ? A_ADCIDX : ADCIDX; in snd_emu10k1_capture_open()
1205 emu->capture_interrupt = snd_emu10k1_pcm_ac97adc_interrupt; in snd_emu10k1_capture_open()
1206 emu->pcm_capture_substream = substream; in snd_emu10k1_capture_open()
1214 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_close() local
1216 emu->capture_interrupt = NULL; in snd_emu10k1_capture_close()
1217 emu->pcm_capture_substream = NULL; in snd_emu10k1_capture_close()
1223 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_mic_open() local
1230 epcm->emu = emu; in snd_emu10k1_capture_mic_open()
1237 epcm->capture_idx_reg = emu->audigy ? A_MICIDX : MICIDX; in snd_emu10k1_capture_mic_open()
1244 emu->capture_mic_interrupt = snd_emu10k1_pcm_ac97mic_interrupt; in snd_emu10k1_capture_mic_open()
1245 emu->pcm_capture_mic_substream = substream; in snd_emu10k1_capture_mic_open()
1252 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_mic_close() local
1254 emu->capture_interrupt = NULL; in snd_emu10k1_capture_mic_close()
1255 emu->pcm_capture_mic_substream = NULL; in snd_emu10k1_capture_mic_close()
1261 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_efx_open() local
1264 int nefx = emu->audigy ? 64 : 32; in snd_emu10k1_capture_efx_open()
1270 epcm->emu = emu; in snd_emu10k1_capture_efx_open()
1283 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_capture_efx_open()
1284 if (emu->card_capabilities->emu_model) { in snd_emu10k1_capture_efx_open()
1307 switch (emu->emu1010.internal_clock) { in snd_emu10k1_capture_efx_open()
1343 if (emu->efx_voices_mask[idx/32] & (1 << (idx%32))) { in snd_emu10k1_capture_efx_open()
1349 epcm->capture_cr_val = emu->efx_voices_mask[0]; in snd_emu10k1_capture_efx_open()
1350 epcm->capture_cr_val2 = emu->efx_voices_mask[1]; in snd_emu10k1_capture_efx_open()
1351 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_capture_efx_open()
1352 emu->capture_efx_interrupt = snd_emu10k1_pcm_efx_interrupt; in snd_emu10k1_capture_efx_open()
1353 emu->pcm_capture_efx_substream = substream; in snd_emu10k1_capture_efx_open()
1360 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_capture_efx_close() local
1362 emu->capture_interrupt = NULL; in snd_emu10k1_capture_efx_close()
1363 emu->pcm_capture_efx_substream = NULL; in snd_emu10k1_capture_efx_close()
1403 int snd_emu10k1_pcm(struct snd_emu10k1 *emu, int device) in snd_emu10k1_pcm() argument
1409 if ((err = snd_pcm_new(emu->card, "emu10k1", device, 32, 1, &pcm)) < 0) in snd_emu10k1_pcm()
1412 pcm->private_data = emu; in snd_emu10k1_pcm()
1420 emu->pcm = pcm; in snd_emu10k1_pcm()
1423 …if ((err = snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV_SG, snd_dma_pci_data(emu->p… in snd_emu10k1_pcm()
1427 …snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, … in snd_emu10k1_pcm()
1432 int snd_emu10k1_pcm_multi(struct snd_emu10k1 *emu, int device) in snd_emu10k1_pcm_multi() argument
1438 if ((err = snd_pcm_new(emu->card, "emu10k1", device, 1, 0, &pcm)) < 0) in snd_emu10k1_pcm_multi()
1441 pcm->private_data = emu; in snd_emu10k1_pcm_multi()
1448 emu->pcm_multi = pcm; in snd_emu10k1_pcm_multi()
1451 …if ((err = snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV_SG, snd_dma_pci_data(emu->p… in snd_emu10k1_pcm_multi()
1469 int snd_emu10k1_pcm_mic(struct snd_emu10k1 *emu, int device) in snd_emu10k1_pcm_mic() argument
1474 if ((err = snd_pcm_new(emu->card, "emu10k1 mic", device, 0, 1, &pcm)) < 0) in snd_emu10k1_pcm_mic()
1477 pcm->private_data = emu; in snd_emu10k1_pcm_mic()
1483 emu->pcm_mic = pcm; in snd_emu10k1_pcm_mic()
1485 …snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024… in snd_emu10k1_pcm_mic()
1492 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_pcm_efx_voices_mask_info() local
1493 int nefx = emu->audigy ? 64 : 32; in snd_emu10k1_pcm_efx_voices_mask_info()
1503 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_pcm_efx_voices_mask_get() local
1504 int nefx = emu->audigy ? 64 : 32; in snd_emu10k1_pcm_efx_voices_mask_get()
1507 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_pcm_efx_voices_mask_get()
1509 ucontrol->value.integer.value[idx] = (emu->efx_voices_mask[idx / 32] & (1 << (idx % 32))) ? 1 : 0; in snd_emu10k1_pcm_efx_voices_mask_get()
1510 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_pcm_efx_voices_mask_get()
1516 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_pcm_efx_voices_mask_put() local
1518 int nefx = emu->audigy ? 64 : 32; in snd_emu10k1_pcm_efx_voices_mask_put()
1519 int nefxb = emu->audigy ? 7 : 6; in snd_emu10k1_pcm_efx_voices_mask_put()
1536 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_pcm_efx_voices_mask_put()
1537 change = (nval[0] != emu->efx_voices_mask[0]) || in snd_emu10k1_pcm_efx_voices_mask_put()
1538 (nval[1] != emu->efx_voices_mask[1]); in snd_emu10k1_pcm_efx_voices_mask_put()
1539 emu->efx_voices_mask[0] = nval[0]; in snd_emu10k1_pcm_efx_voices_mask_put()
1540 emu->efx_voices_mask[1] = nval[1]; in snd_emu10k1_pcm_efx_voices_mask_put()
1541 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_pcm_efx_voices_mask_put()
1570 static void snd_emu10k1_fx8010_playback_irq(struct snd_emu10k1 *emu, void *private_data) in snd_emu10k1_fx8010_playback_irq() argument
1604 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in fx8010_pb_trans_copy() local
1605 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in fx8010_pb_trans_copy()
1614 snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos, in fx8010_pb_trans_copy()
1615 (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2, in fx8010_pb_trans_copy()
1622 snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + tram_pos, in fx8010_pb_trans_copy()
1623 (unsigned short *)emu->fx8010.etram_pages.area + tram_pos + tram_size / 2, in fx8010_pb_trans_copy()
1632 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_transfer() local
1633 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_transfer()
1647 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_hw_free() local
1648 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_hw_free()
1652 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, 0); in snd_emu10k1_fx8010_playback_hw_free()
1659 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_prepare() local
1661 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_prepare()
1675 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_running, 0, 0); /* reset */ in snd_emu10k1_fx8010_playback_prepare()
1676 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0); /* reset */ in snd_emu10k1_fx8010_playback_prepare()
1677 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_size, 0, runtime->buffer_size); in snd_emu10k1_fx8010_playback_prepare()
1678 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_ptr, 0, 0); /* reset ptr number */ in snd_emu10k1_fx8010_playback_prepare()
1679 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_count, 0, runtime->period_size); in snd_emu10k1_fx8010_playback_prepare()
1680 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_tmpcount, 0, runtime->period_size); in snd_emu10k1_fx8010_playback_prepare()
1682 …snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + 0x80 + pcm->etram[i], 0, (TANKMEMADDRREG_READ|TANK… in snd_emu10k1_fx8010_playback_prepare()
1688 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_trigger() local
1689 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_trigger()
1692 spin_lock(&emu->reg_lock); in snd_emu10k1_fx8010_playback_trigger()
1706 snd_emu10k1_ptr_write(emu, SPCS0 + i, 0, bits); in snd_emu10k1_fx8010_playback_trigger()
1710 …result = snd_emu10k1_fx8010_register_irq_handler(emu, snd_emu10k1_fx8010_playback_irq, pcm->gpr_ru… in snd_emu10k1_fx8010_playback_trigger()
1714 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 1); in snd_emu10k1_fx8010_playback_trigger()
1719 snd_emu10k1_fx8010_unregister_irq_handler(emu, pcm->irq); pcm->irq = NULL; in snd_emu10k1_fx8010_playback_trigger()
1720 snd_emu10k1_ptr_write(emu, emu->gpr_base + pcm->gpr_trigger, 0, 0); in snd_emu10k1_fx8010_playback_trigger()
1729 spin_unlock(&emu->reg_lock); in snd_emu10k1_fx8010_playback_trigger()
1735 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_pointer() local
1736 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_pointer()
1739 if (!snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_trigger, 0)) in snd_emu10k1_fx8010_playback_pointer()
1741 ptr = snd_emu10k1_ptr_read(emu, emu->gpr_base + pcm->gpr_ptr, 0) << 2; in snd_emu10k1_fx8010_playback_pointer()
1766 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_open() local
1768 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_open()
1773 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_fx8010_playback_open()
1775 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_fx8010_playback_open()
1779 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_fx8010_playback_open()
1785 struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream); in snd_emu10k1_fx8010_playback_close() local
1786 struct snd_emu10k1_fx8010_pcm *pcm = &emu->fx8010.pcm[substream->number]; in snd_emu10k1_fx8010_playback_close()
1788 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_fx8010_playback_close()
1790 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_fx8010_playback_close()
1806 int snd_emu10k1_pcm_efx(struct snd_emu10k1 *emu, int device) in snd_emu10k1_pcm_efx() argument
1812 if ((err = snd_pcm_new(emu->card, "emu10k1 efx", device, 8, 1, &pcm)) < 0) in snd_emu10k1_pcm_efx()
1815 pcm->private_data = emu; in snd_emu10k1_pcm_efx()
1822 emu->pcm_efx = pcm; in snd_emu10k1_pcm_efx()
1829 if (emu->audigy) { in snd_emu10k1_pcm_efx()
1830 emu->efx_voices_mask[0] = 0; in snd_emu10k1_pcm_efx()
1831 if (emu->card_capabilities->emu_model) in snd_emu10k1_pcm_efx()
1836 emu->efx_voices_mask[1] = 0xffffffff; in snd_emu10k1_pcm_efx()
1838 emu->efx_voices_mask[1] = 0xffff; in snd_emu10k1_pcm_efx()
1840 emu->efx_voices_mask[0] = 0xffff0000; in snd_emu10k1_pcm_efx()
1841 emu->efx_voices_mask[1] = 0; in snd_emu10k1_pcm_efx()
1849 kctl = snd_ctl_new1(&snd_emu10k1_pcm_efx_voices_mask, emu); in snd_emu10k1_pcm_efx()
1853 snd_ctl_add(emu->card, kctl); in snd_emu10k1_pcm_efx()
1855 …snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024… in snd_emu10k1_pcm_efx()