Lines Matching refs:ypcm
291 pvoice->ypcm->use_441_slot = 0; in snd_ymfpci_voice_free()
294 pvoice->ypcm = NULL; in snd_ymfpci_voice_free()
306 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_pcm_interrupt() local
309 if ((ypcm = voice->ypcm) == NULL) in snd_ymfpci_pcm_interrupt()
311 if (ypcm->substream == NULL) in snd_ymfpci_pcm_interrupt()
314 if (ypcm->running) { in snd_ymfpci_pcm_interrupt()
316 if (pos < ypcm->last_pos) in snd_ymfpci_pcm_interrupt()
317 delta = pos + (ypcm->buffer_size - ypcm->last_pos); in snd_ymfpci_pcm_interrupt()
319 delta = pos - ypcm->last_pos; in snd_ymfpci_pcm_interrupt()
320 ypcm->period_pos += delta; in snd_ymfpci_pcm_interrupt()
321 ypcm->last_pos = pos; in snd_ymfpci_pcm_interrupt()
322 if (ypcm->period_pos >= ypcm->period_size) { in snd_ymfpci_pcm_interrupt()
329 ypcm->period_pos %= ypcm->period_size; in snd_ymfpci_pcm_interrupt()
331 snd_pcm_period_elapsed(ypcm->substream); in snd_ymfpci_pcm_interrupt()
335 if (unlikely(ypcm->update_pcm_vol)) { in snd_ymfpci_pcm_interrupt()
336 unsigned int subs = ypcm->substream->number; in snd_ymfpci_pcm_interrupt()
344 if (ypcm->output_rear) in snd_ymfpci_pcm_interrupt()
346 if (ypcm->voices[1]) in snd_ymfpci_pcm_interrupt()
347 bank = &ypcm->voices[1]->bank[next_bank]; in snd_ymfpci_pcm_interrupt()
350 if (ypcm->output_rear) in snd_ymfpci_pcm_interrupt()
352 ypcm->update_pcm_vol--; in snd_ymfpci_pcm_interrupt()
361 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_pcm_capture_interrupt() local
362 struct snd_ymfpci *chip = ypcm->chip; in snd_ymfpci_pcm_capture_interrupt()
366 if (ypcm->running) { in snd_ymfpci_pcm_capture_interrupt()
367 …pos = le32_to_cpu(chip->bank_capture[ypcm->capture_bank_number][chip->active_bank]->start) >> ypcm… in snd_ymfpci_pcm_capture_interrupt()
368 if (pos < ypcm->last_pos) in snd_ymfpci_pcm_capture_interrupt()
369 delta = pos + (ypcm->buffer_size - ypcm->last_pos); in snd_ymfpci_pcm_capture_interrupt()
371 delta = pos - ypcm->last_pos; in snd_ymfpci_pcm_capture_interrupt()
372 ypcm->period_pos += delta; in snd_ymfpci_pcm_capture_interrupt()
373 ypcm->last_pos = pos; in snd_ymfpci_pcm_capture_interrupt()
374 if (ypcm->period_pos >= ypcm->period_size) { in snd_ymfpci_pcm_capture_interrupt()
375 ypcm->period_pos %= ypcm->period_size; in snd_ymfpci_pcm_capture_interrupt()
394 struct snd_ymfpci_pcm *ypcm = substream->runtime->private_data; in snd_ymfpci_playback_trigger() local
399 if (ypcm->voices[0] == NULL) { in snd_ymfpci_playback_trigger()
407 chip->ctrl_playback[ypcm->voices[0]->number + 1] = cpu_to_le32(ypcm->voices[0]->bank_addr); in snd_ymfpci_playback_trigger()
408 if (ypcm->voices[1] != NULL && !ypcm->use_441_slot) in snd_ymfpci_playback_trigger()
409 chip->ctrl_playback[ypcm->voices[1]->number + 1] = cpu_to_le32(ypcm->voices[1]->bank_addr); in snd_ymfpci_playback_trigger()
410 ypcm->running = 1; in snd_ymfpci_playback_trigger()
413 if (substream->pcm == chip->pcm && !ypcm->use_441_slot) { in snd_ymfpci_playback_trigger()
420 chip->ctrl_playback[ypcm->voices[0]->number + 1] = 0; in snd_ymfpci_playback_trigger()
421 if (ypcm->voices[1] != NULL && !ypcm->use_441_slot) in snd_ymfpci_playback_trigger()
422 chip->ctrl_playback[ypcm->voices[1]->number + 1] = 0; in snd_ymfpci_playback_trigger()
423 ypcm->running = 0; in snd_ymfpci_playback_trigger()
439 struct snd_ymfpci_pcm *ypcm = substream->runtime->private_data; in snd_ymfpci_capture_trigger() local
448 tmp = snd_ymfpci_readl(chip, YDSXGR_MAPOFREC) | (1 << ypcm->capture_bank_number); in snd_ymfpci_capture_trigger()
450 ypcm->running = 1; in snd_ymfpci_capture_trigger()
455 tmp = snd_ymfpci_readl(chip, YDSXGR_MAPOFREC) & ~(1 << ypcm->capture_bank_number); in snd_ymfpci_capture_trigger()
457 ypcm->running = 0; in snd_ymfpci_capture_trigger()
467 static int snd_ymfpci_pcm_voice_alloc(struct snd_ymfpci_pcm *ypcm, int voices) in snd_ymfpci_pcm_voice_alloc() argument
471 if (ypcm->voices[1] != NULL && voices < 2) { in snd_ymfpci_pcm_voice_alloc()
472 snd_ymfpci_voice_free(ypcm->chip, ypcm->voices[1]); in snd_ymfpci_pcm_voice_alloc()
473 ypcm->voices[1] = NULL; in snd_ymfpci_pcm_voice_alloc()
475 if (voices == 1 && ypcm->voices[0] != NULL) in snd_ymfpci_pcm_voice_alloc()
477 if (voices == 2 && ypcm->voices[0] != NULL && ypcm->voices[1] != NULL) in snd_ymfpci_pcm_voice_alloc()
480 if (ypcm->voices[0] != NULL && ypcm->voices[1] == NULL) { in snd_ymfpci_pcm_voice_alloc()
481 snd_ymfpci_voice_free(ypcm->chip, ypcm->voices[0]); in snd_ymfpci_pcm_voice_alloc()
482 ypcm->voices[0] = NULL; in snd_ymfpci_pcm_voice_alloc()
485 err = snd_ymfpci_voice_alloc(ypcm->chip, YMFPCI_PCM, voices > 1, &ypcm->voices[0]); in snd_ymfpci_pcm_voice_alloc()
488 ypcm->voices[0]->ypcm = ypcm; in snd_ymfpci_pcm_voice_alloc()
489 ypcm->voices[0]->interrupt = snd_ymfpci_pcm_interrupt; in snd_ymfpci_pcm_voice_alloc()
491 ypcm->voices[1] = &ypcm->chip->voices[ypcm->voices[0]->number + 1]; in snd_ymfpci_pcm_voice_alloc()
492 ypcm->voices[1]->ypcm = ypcm; in snd_ymfpci_pcm_voice_alloc()
497 static void snd_ymfpci_pcm_init_voice(struct snd_ymfpci_pcm *ypcm, unsigned int voiceidx, in snd_ymfpci_pcm_init_voice() argument
501 struct snd_ymfpci_voice *voice = ypcm->voices[voiceidx]; in snd_ymfpci_pcm_init_voice()
522 vol_left = cpu_to_le32(ypcm->chip->pcm_mixer in snd_ymfpci_pcm_init_voice()
523 [ypcm->substream->number].left << 15); in snd_ymfpci_pcm_init_voice()
524 vol_right = cpu_to_le32(ypcm->chip->pcm_mixer in snd_ymfpci_pcm_init_voice()
525 [ypcm->substream->number].right << 15); in snd_ymfpci_pcm_init_voice()
530 spin_lock_irqsave(&ypcm->chip->voice_lock, flags); in snd_ymfpci_pcm_init_voice()
534 else if (ypcm->chip->device_id == PCI_DEVICE_ID_YAMAHA_754 && in snd_ymfpci_pcm_init_voice()
536 voiceidx == 0 && (ypcm->chip->src441_used == -1 || in snd_ymfpci_pcm_init_voice()
537 ypcm->chip->src441_used == voice->number)) { in snd_ymfpci_pcm_init_voice()
538 ypcm->chip->src441_used = voice->number; in snd_ymfpci_pcm_init_voice()
539 ypcm->use_441_slot = 1; in snd_ymfpci_pcm_init_voice()
542 if (ypcm->chip->src441_used == voice->number && in snd_ymfpci_pcm_init_voice()
544 ypcm->chip->src441_used = -1; in snd_ymfpci_pcm_init_voice()
545 ypcm->use_441_slot = 0; in snd_ymfpci_pcm_init_voice()
549 spin_unlock_irqrestore(&ypcm->chip->voice_lock, flags); in snd_ymfpci_pcm_init_voice()
555 bank->loop_end = cpu_to_le32(ypcm->buffer_size); in snd_ymfpci_pcm_init_voice()
564 if (ypcm->output_front) { in snd_ymfpci_pcm_init_voice()
574 if (ypcm->output_rear) { in snd_ymfpci_pcm_init_voice()
575 if (!ypcm->swap_rear) { in snd_ymfpci_pcm_init_voice()
642 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_playback_hw_params() local
647 if ((err = snd_ymfpci_pcm_voice_alloc(ypcm, params_channels(hw_params))) < 0) in snd_ymfpci_playback_hw_params()
656 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_playback_hw_free() local
660 ypcm = runtime->private_data; in snd_ymfpci_playback_hw_free()
665 if (ypcm->voices[1]) { in snd_ymfpci_playback_hw_free()
666 snd_ymfpci_voice_free(chip, ypcm->voices[1]); in snd_ymfpci_playback_hw_free()
667 ypcm->voices[1] = NULL; in snd_ymfpci_playback_hw_free()
669 if (ypcm->voices[0]) { in snd_ymfpci_playback_hw_free()
670 snd_ymfpci_voice_free(chip, ypcm->voices[0]); in snd_ymfpci_playback_hw_free()
671 ypcm->voices[0] = NULL; in snd_ymfpci_playback_hw_free()
680 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_playback_prepare() local
684 ypcm->period_size = runtime->period_size; in snd_ymfpci_playback_prepare()
685 ypcm->buffer_size = runtime->buffer_size; in snd_ymfpci_playback_prepare()
686 ypcm->period_pos = 0; in snd_ymfpci_playback_prepare()
687 ypcm->last_pos = 0; in snd_ymfpci_playback_prepare()
689 snd_ymfpci_pcm_init_voice(ypcm, nvoice, runtime, in snd_ymfpci_playback_prepare()
692 if (substream->pcm == chip->pcm && !ypcm->use_441_slot) { in snd_ymfpci_playback_prepare()
719 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_capture_prepare() local
724 ypcm->period_size = runtime->period_size; in snd_ymfpci_capture_prepare()
725 ypcm->buffer_size = runtime->buffer_size; in snd_ymfpci_capture_prepare()
726 ypcm->period_pos = 0; in snd_ymfpci_capture_prepare()
727 ypcm->last_pos = 0; in snd_ymfpci_capture_prepare()
728 ypcm->shift = 0; in snd_ymfpci_capture_prepare()
733 ypcm->shift++; in snd_ymfpci_capture_prepare()
738 ypcm->shift++; in snd_ymfpci_capture_prepare()
739 switch (ypcm->capture_bank_number) { in snd_ymfpci_capture_prepare()
750 bank = chip->bank_capture[ypcm->capture_bank_number][nbank]; in snd_ymfpci_capture_prepare()
752 bank->loop_end = cpu_to_le32(ypcm->buffer_size << ypcm->shift); in snd_ymfpci_capture_prepare()
763 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_playback_pointer() local
764 struct snd_ymfpci_voice *voice = ypcm->voices[0]; in snd_ymfpci_playback_pointer()
766 if (!(ypcm->running && voice)) in snd_ymfpci_playback_pointer()
775 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_capture_pointer() local
777 if (!ypcm->running) in snd_ymfpci_capture_pointer()
779 …return le32_to_cpu(chip->bank_capture[ypcm->capture_bank_number][chip->active_bank]->start) >> ypc… in snd_ymfpci_capture_pointer()
901 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_playback_open_1() local
915 ypcm = kzalloc(sizeof(*ypcm), GFP_KERNEL); in snd_ymfpci_playback_open_1()
916 if (ypcm == NULL) in snd_ymfpci_playback_open_1()
918 ypcm->chip = chip; in snd_ymfpci_playback_open_1()
919 ypcm->type = PLAYBACK_VOICE; in snd_ymfpci_playback_open_1()
920 ypcm->substream = substream; in snd_ymfpci_playback_open_1()
921 runtime->private_data = ypcm; in snd_ymfpci_playback_open_1()
955 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_playback_open() local
960 ypcm = runtime->private_data; in snd_ymfpci_playback_open()
961 ypcm->output_front = 1; in snd_ymfpci_playback_open()
962 ypcm->output_rear = chip->mode_dup4ch ? 1 : 0; in snd_ymfpci_playback_open()
963 ypcm->swap_rear = 0; in snd_ymfpci_playback_open()
965 if (ypcm->output_rear) { in snd_ymfpci_playback_open()
977 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_playback_spdif_open() local
982 ypcm = runtime->private_data; in snd_ymfpci_playback_spdif_open()
983 ypcm->output_front = 0; in snd_ymfpci_playback_spdif_open()
984 ypcm->output_rear = 1; in snd_ymfpci_playback_spdif_open()
985 ypcm->swap_rear = 1; in snd_ymfpci_playback_spdif_open()
1005 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_playback_4ch_open() local
1010 ypcm = runtime->private_data; in snd_ymfpci_playback_4ch_open()
1011 ypcm->output_front = 0; in snd_ymfpci_playback_4ch_open()
1012 ypcm->output_rear = 1; in snd_ymfpci_playback_4ch_open()
1013 ypcm->swap_rear = 0; in snd_ymfpci_playback_4ch_open()
1026 struct snd_ymfpci_pcm *ypcm; in snd_ymfpci_capture_open() local
1040 ypcm = kzalloc(sizeof(*ypcm), GFP_KERNEL); in snd_ymfpci_capture_open()
1041 if (ypcm == NULL) in snd_ymfpci_capture_open()
1043 ypcm->chip = chip; in snd_ymfpci_capture_open()
1044 ypcm->type = capture_bank_number + CAPTURE_REC; in snd_ymfpci_capture_open()
1045 ypcm->substream = substream; in snd_ymfpci_capture_open()
1046 ypcm->capture_bank_number = capture_bank_number; in snd_ymfpci_capture_open()
1048 runtime->private_data = ypcm; in snd_ymfpci_capture_open()
1072 struct snd_ymfpci_pcm *ypcm = substream->runtime->private_data; in snd_ymfpci_playback_close() local
1075 if (ypcm->output_rear && chip->rear_opened > 0) { in snd_ymfpci_playback_close()
1117 struct snd_ymfpci_pcm *ypcm = runtime->private_data; in snd_ymfpci_capture_close() local
1119 if (ypcm != NULL) { in snd_ymfpci_capture_close()
1120 chip->capture_substream[ypcm->capture_bank_number] = NULL; in snd_ymfpci_capture_close()
1769 struct snd_ymfpci_pcm *ypcm = substream->runtime->private_data; in snd_ymfpci_pcm_vol_put() local
1770 if (!ypcm->use_441_slot) in snd_ymfpci_pcm_vol_put()
1771 ypcm->update_pcm_vol = 2; in snd_ymfpci_pcm_vol_put()