Lines Matching refs:opl3
128 static void debug_alloc(struct snd_opl3 *opl3, char *s, int voice) { in debug_alloc() argument
132 printk(KERN_DEBUG "time %.5i: %s [%.2i]: ", opl3->use_time, s, voice); in debug_alloc()
133 for (i = 0; i < opl3->max_voices; i++) in debug_alloc()
134 printk("%c", *(str + opl3->voices[i].state + 1)); in debug_alloc()
142 static int opl3_get_voice(struct snd_opl3 *opl3, int instr_4op, in opl3_get_voice() argument
173 for (i = 0; i < opl3->max_voices; i++) { in opl3_get_voice()
174 vp = &opl3->voices[i]; in opl3_get_voice()
197 vp2 = &opl3->voices[i + 3]; in opl3_get_voice()
244 struct snd_opl3 *opl3 = (struct snd_opl3 *)data; in snd_opl3_timer_func() local
249 spin_lock_irqsave(&opl3->voice_lock, flags); in snd_opl3_timer_func()
250 for (i = 0; i < opl3->max_voices; i++) { in snd_opl3_timer_func()
251 struct snd_opl3_voice *vp = &opl3->voices[i]; in snd_opl3_timer_func()
254 snd_opl3_note_off_unsafe(opl3, vp->note, 0, in snd_opl3_timer_func()
260 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_timer_func()
262 spin_lock_irqsave(&opl3->sys_timer_lock, flags); in snd_opl3_timer_func()
264 mod_timer(&opl3->tlist, jiffies + 1); /* invoke again */ in snd_opl3_timer_func()
266 opl3->sys_timer_status = 0; in snd_opl3_timer_func()
267 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags); in snd_opl3_timer_func()
273 static void snd_opl3_start_timer(struct snd_opl3 *opl3) in snd_opl3_start_timer() argument
276 spin_lock_irqsave(&opl3->sys_timer_lock, flags); in snd_opl3_start_timer()
277 if (! opl3->sys_timer_status) { in snd_opl3_start_timer()
278 mod_timer(&opl3->tlist, jiffies + 1); in snd_opl3_start_timer()
279 opl3->sys_timer_status = 1; in snd_opl3_start_timer()
281 spin_unlock_irqrestore(&opl3->sys_timer_lock, flags); in snd_opl3_start_timer()
296 struct snd_opl3 *opl3; in snd_opl3_note_on() local
322 opl3 = p; in snd_opl3_note_on()
331 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) { in snd_opl3_note_on()
350 spin_lock_irqsave(&opl3->voice_lock, flags); in snd_opl3_note_on()
353 snd_opl3_drum_switch(opl3, note, vel, 1, chan); in snd_opl3_note_on()
354 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_on()
359 patch = snd_opl3_find_patch(opl3, prg, bank, 0); in snd_opl3_note_on()
361 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_on()
371 if (opl3->hardware >= OPL3_HW_OPL3) { in snd_opl3_note_on()
376 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_on()
385 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) { in snd_opl3_note_on()
386 voice = opl3_get_voice(opl3, instr_4op, chan); in snd_opl3_note_on()
393 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_on()
410 vp = &opl3->voices[voice]; in snd_opl3_note_on()
414 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
417 vp2 = &opl3->voices[voice + 3]; in snd_opl3_note_on()
422 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
428 if ((opl3->connection_reg ^ connect_mask) & connect_mask) { in snd_opl3_note_on()
429 opl3->connection_reg |= connect_mask; in snd_opl3_note_on()
432 opl3->command(opl3, opl3_reg, opl3->connection_reg); in snd_opl3_note_on()
435 if ((opl3->connection_reg ^ ~connect_mask) & connect_mask) { in snd_opl3_note_on()
436 opl3->connection_reg &= ~connect_mask; in snd_opl3_note_on()
439 opl3->command(opl3, opl3_reg, opl3->connection_reg); in snd_opl3_note_on()
445 opl3->connection_reg); in snd_opl3_note_on()
486 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
491 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
496 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
501 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
506 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
518 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
531 opl3->command(opl3, opl3_reg, reg_val); in snd_opl3_note_on()
551 opl3->command(opl3, opl3_reg, fnum); in snd_opl3_note_on()
553 opl3->voices[voice].keyon_reg = blocknum; in snd_opl3_note_on()
563 opl3->command(opl3, opl3_reg, blocknum); in snd_opl3_note_on()
567 opl3->voices[voice].note_off = jiffies + in snd_opl3_note_on()
569 snd_opl3_start_timer(opl3); in snd_opl3_note_on()
570 opl3->voices[voice].note_off_check = 1; in snd_opl3_note_on()
572 opl3->voices[voice].note_off_check = 0; in snd_opl3_note_on()
578 vp->time = opl3->use_time++; in snd_opl3_note_on()
585 vp2 = &opl3->voices[voice + 3]; in snd_opl3_note_on()
586 vp2->time = opl3->use_time++; in snd_opl3_note_on()
593 vp2 = &opl3->voices[voice + 3]; in snd_opl3_note_on()
594 vp2->time = opl3->use_time++; in snd_opl3_note_on()
601 debug_alloc(opl3, "note on ", voice); in snd_opl3_note_on()
619 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_on()
622 static void snd_opl3_kill_voice(struct snd_opl3 *opl3, int voice) in snd_opl3_kill_voice() argument
633 vp = &opl3->voices[voice]; in snd_opl3_kill_voice()
650 opl3->command(opl3, opl3_reg, vp->keyon_reg); in snd_opl3_kill_voice()
653 vp->time = opl3->use_time++; in snd_opl3_kill_voice()
656 vp2 = &opl3->voices[voice + 3]; in snd_opl3_kill_voice()
658 vp2->time = opl3->use_time++; in snd_opl3_kill_voice()
663 debug_alloc(opl3, "note off", voice); in snd_opl3_kill_voice()
674 struct snd_opl3 *opl3; in snd_opl3_note_off_unsafe() local
679 opl3 = p; in snd_opl3_note_off_unsafe()
686 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) { in snd_opl3_note_off_unsafe()
688 snd_opl3_drum_switch(opl3, note, vel, 0, chan); in snd_opl3_note_off_unsafe()
693 for (voice = 0; voice < opl3->max_voices; voice++) { in snd_opl3_note_off_unsafe()
694 vp = &opl3->voices[voice]; in snd_opl3_note_off_unsafe()
696 snd_opl3_kill_voice(opl3, voice); in snd_opl3_note_off_unsafe()
703 snd_opl3_kill_voice(opl3, voice); in snd_opl3_note_off_unsafe()
711 struct snd_opl3 *opl3 = p; in snd_opl3_note_off() local
714 spin_lock_irqsave(&opl3->voice_lock, flags); in snd_opl3_note_off()
716 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_note_off()
724 struct snd_opl3 *opl3; in snd_opl3_key_press() local
726 opl3 = p; in snd_opl3_key_press()
738 struct snd_opl3 *opl3; in snd_opl3_terminate_note() local
740 opl3 = p; in snd_opl3_terminate_note()
747 static void snd_opl3_update_pitch(struct snd_opl3 *opl3, int voice) in snd_opl3_update_pitch() argument
760 vp = &opl3->voices[voice]; in snd_opl3_update_pitch()
778 opl3->command(opl3, opl3_reg, fnum); in snd_opl3_update_pitch()
787 opl3->command(opl3, opl3_reg, blocknum); in snd_opl3_update_pitch()
789 vp->time = opl3->use_time++; in snd_opl3_update_pitch()
795 static void snd_opl3_pitch_ctrl(struct snd_opl3 *opl3, struct snd_midi_channel *chan) in snd_opl3_pitch_ctrl() argument
802 spin_lock_irqsave(&opl3->voice_lock, flags); in snd_opl3_pitch_ctrl()
804 if (opl3->synth_mode == SNDRV_OPL3_MODE_SEQ) { in snd_opl3_pitch_ctrl()
805 for (voice = 0; voice < opl3->max_voices; voice++) { in snd_opl3_pitch_ctrl()
806 vp = &opl3->voices[voice]; in snd_opl3_pitch_ctrl()
808 snd_opl3_update_pitch(opl3, voice); in snd_opl3_pitch_ctrl()
815 snd_opl3_update_pitch(opl3, voice); in snd_opl3_pitch_ctrl()
818 spin_unlock_irqrestore(&opl3->voice_lock, flags); in snd_opl3_pitch_ctrl()
827 struct snd_opl3 *opl3; in snd_opl3_control() local
829 opl3 = p; in snd_opl3_control()
838 opl3->drum_reg |= OPL3_VIBRATO_DEPTH; in snd_opl3_control()
840 opl3->drum_reg &= ~OPL3_VIBRATO_DEPTH; in snd_opl3_control()
841 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION, in snd_opl3_control()
842 opl3->drum_reg); in snd_opl3_control()
846 opl3->drum_reg |= OPL3_TREMOLO_DEPTH; in snd_opl3_control()
848 opl3->drum_reg &= ~OPL3_TREMOLO_DEPTH; in snd_opl3_control()
849 opl3->command(opl3, OPL3_LEFT | OPL3_REG_PERCUSSION, in snd_opl3_control()
850 opl3->drum_reg); in snd_opl3_control()
853 snd_opl3_pitch_ctrl(opl3, chan); in snd_opl3_control()
864 struct snd_opl3 *opl3; in snd_opl3_nrpn() local
866 opl3 = p; in snd_opl3_nrpn()
879 struct snd_opl3 *opl3; in snd_opl3_sysex() local
881 opl3 = p; in snd_opl3_sysex()