Lines Matching refs:voice

81 struct voice {  struct
95 struct voice *timing; argument
133 struct voice voices[64];
134 struct voice capture_voice;
204 static void sis_update_sso(struct voice *voice, u16 period) in sis_update_sso() argument
206 void __iomem *base = voice->ctrl_base; in sis_update_sso()
208 voice->sso += period; in sis_update_sso()
209 if (voice->sso >= voice->buffer_size) in sis_update_sso()
210 voice->sso -= voice->buffer_size; in sis_update_sso()
213 if (voice->sso < 8) in sis_update_sso()
214 voice->sso = 8; in sis_update_sso()
217 writew(voice->sso & 0xffff, base + SIS_PLAY_DMA_SSO_ESO + 2); in sis_update_sso()
220 static void sis_update_voice(struct voice *voice) in sis_update_voice() argument
222 if (voice->flags & VOICE_SSO_TIMING) { in sis_update_voice()
223 sis_update_sso(voice, voice->period_size); in sis_update_voice()
224 } else if (voice->flags & VOICE_SYNC_TIMING) { in sis_update_voice()
230 if (voice->vperiod > voice->period_size) { in sis_update_voice()
231 voice->vperiod -= voice->period_size; in sis_update_voice()
232 if (voice->vperiod < voice->period_size) in sis_update_voice()
233 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
235 sis_update_sso(voice, voice->period_size); in sis_update_voice()
244 sync = voice->sync_cso; in sis_update_voice()
245 sync -= readw(voice->sync_base + SIS_CAPTURE_DMA_FORMAT_CSO); in sis_update_voice()
246 if (sync > (voice->sync_buffer_size / 2)) in sis_update_voice()
247 sync -= voice->sync_buffer_size; in sis_update_voice()
257 sis_update_sso(voice, sync); in sis_update_voice()
277 voice->vperiod = voice->sync_period_size + 1; in sis_update_voice()
279 voice->vperiod = voice->sync_period_size + sync + 10; in sis_update_voice()
281 if (voice->vperiod < voice->buffer_size) { in sis_update_voice()
282 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
283 voice->vperiod = 0; in sis_update_voice()
285 sis_update_sso(voice, voice->period_size); in sis_update_voice()
287 sync = voice->sync_cso + voice->sync_period_size; in sis_update_voice()
288 if (sync >= voice->sync_buffer_size) in sis_update_voice()
289 sync -= voice->sync_buffer_size; in sis_update_voice()
290 voice->sync_cso = sync; in sis_update_voice()
293 snd_pcm_period_elapsed(voice->substream); in sis_update_voice()
296 static void sis_voice_irq(u32 status, struct voice *voice) in sis_voice_irq() argument
303 voice += bit; in sis_voice_irq()
304 sis_update_voice(voice); in sis_voice_irq()
305 voice++; in sis_voice_irq()
313 struct voice *voice; in sis_interrupt() local
343 voice = &sis->capture_voice; in sis_interrupt()
344 if (!voice->timing) in sis_interrupt()
345 snd_pcm_period_elapsed(voice->substream); in sis_interrupt()
401 static void sis_free_voice(struct sis7019 *sis, struct voice *voice) in sis_free_voice() argument
406 if (voice->timing) { in sis_free_voice()
408 voice->timing->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | in sis_free_voice()
410 voice->timing = NULL; in sis_free_voice()
412 voice->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | VOICE_SYNC_TIMING); in sis_free_voice()
416 static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis) in __sis_alloc_playback_voice()
419 struct voice *voice; in __sis_alloc_playback_voice() local
423 voice = &sis->voices[i]; in __sis_alloc_playback_voice()
424 if (voice->flags & VOICE_IN_USE) in __sis_alloc_playback_voice()
426 voice->flags |= VOICE_IN_USE; in __sis_alloc_playback_voice()
429 voice = NULL; in __sis_alloc_playback_voice()
432 return voice; in __sis_alloc_playback_voice()
435 static struct voice *sis_alloc_playback_voice(struct sis7019 *sis) in sis_alloc_playback_voice()
437 struct voice *voice; in sis_alloc_playback_voice() local
441 voice = __sis_alloc_playback_voice(sis); in sis_alloc_playback_voice()
444 return voice; in sis_alloc_playback_voice()
452 struct voice *voice = runtime->private_data; in sis_alloc_timing_voice() local
466 if (needed && !voice->timing) { in sis_alloc_timing_voice()
468 voice->timing = __sis_alloc_playback_voice(sis); in sis_alloc_timing_voice()
469 if (voice->timing) in sis_alloc_timing_voice()
472 if (!voice->timing) in sis_alloc_timing_voice()
474 voice->timing->substream = substream; in sis_alloc_timing_voice()
475 } else if (!needed && voice->timing) { in sis_alloc_timing_voice()
476 sis_free_voice(sis, voice); in sis_alloc_timing_voice()
477 voice->timing = NULL; in sis_alloc_timing_voice()
487 struct voice *voice; in sis_playback_open() local
489 voice = sis_alloc_playback_voice(sis); in sis_playback_open()
490 if (!voice) in sis_playback_open()
493 voice->substream = substream; in sis_playback_open()
494 runtime->private_data = voice; in sis_playback_open()
508 struct voice *voice = runtime->private_data; in sis_substream_close() local
510 sis_free_voice(sis, voice); in sis_substream_close()
529 struct voice *voice = runtime->private_data; in sis_pcm_playback_prepare() local
530 void __iomem *ctrl_base = voice->ctrl_base; in sis_pcm_playback_prepare()
531 void __iomem *wave_base = voice->wave_base; in sis_pcm_playback_prepare()
557 voice->flags |= VOICE_SSO_TIMING; in sis_pcm_playback_prepare()
558 voice->sso = runtime->period_size - 1; in sis_pcm_playback_prepare()
559 voice->period_size = runtime->period_size; in sis_pcm_playback_prepare()
560 voice->buffer_size = runtime->buffer_size; in sis_pcm_playback_prepare()
597 struct voice *voice; in sis_pcm_trigger() local
628 voice = s->runtime->private_data; in sis_pcm_trigger()
629 if (voice->flags & VOICE_CAPTURE) { in sis_pcm_trigger()
630 record |= 1 << voice->num; in sis_pcm_trigger()
631 voice = voice->timing; in sis_pcm_trigger()
637 if (voice) in sis_pcm_trigger()
638 play[voice->num / 32] |= 1 << (voice->num & 0x1f); in sis_pcm_trigger()
664 struct voice *voice = runtime->private_data; in sis_pcm_pointer() local
667 cso = readl(voice->ctrl_base + SIS_PLAY_DMA_FORMAT_CSO); in sis_pcm_pointer()
676 struct voice *voice = &sis->capture_voice; in sis_capture_open() local
683 if (voice->flags & VOICE_IN_USE) in sis_capture_open()
684 voice = NULL; in sis_capture_open()
686 voice->flags |= VOICE_IN_USE; in sis_capture_open()
689 if (!voice) in sis_capture_open()
692 voice->substream = substream; in sis_capture_open()
693 runtime->private_data = voice; in sis_capture_open()
727 static void sis_prepare_timing_voice(struct voice *voice, in sis_prepare_timing_voice() argument
732 struct voice *timing = voice->timing; in sis_prepare_timing_voice()
786 timing->sync_base = voice->ctrl_base; in sis_prepare_timing_voice()
833 struct voice *voice = runtime->private_data; in sis_pcm_capture_prepare() local
834 void __iomem *rec_base = voice->ctrl_base; in sis_pcm_capture_prepare()
857 if (voice->timing) { in sis_pcm_capture_prepare()
858 sis_prepare_timing_voice(voice, substream); in sis_pcm_capture_prepare()
1317 struct voice *voice; in sis_chip_create() local
1376 voice = &sis->voices[i]; in sis_chip_create()
1377 voice->num = i; in sis_chip_create()
1378 voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i); in sis_chip_create()
1379 voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i); in sis_chip_create()
1382 voice = &sis->capture_voice; in sis_chip_create()
1383 voice->flags = VOICE_CAPTURE; in sis_chip_create()
1384 voice->num = SIS_CAPTURE_CHAN_AC97_PCM_IN; in sis_chip_create()
1385 voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num); in sis_chip_create()