Lines Matching refs:voice

68 struct voice {  struct
82 struct voice *timing; argument
120 struct voice voices[64];
121 struct voice capture_voice;
191 static void sis_update_sso(struct voice *voice, u16 period) in sis_update_sso() argument
193 void __iomem *base = voice->ctrl_base; in sis_update_sso()
195 voice->sso += period; in sis_update_sso()
196 if (voice->sso >= voice->buffer_size) in sis_update_sso()
197 voice->sso -= voice->buffer_size; in sis_update_sso()
200 if (voice->sso < 8) in sis_update_sso()
201 voice->sso = 8; in sis_update_sso()
204 writew(voice->sso & 0xffff, base + SIS_PLAY_DMA_SSO_ESO + 2); in sis_update_sso()
207 static void sis_update_voice(struct voice *voice) in sis_update_voice() argument
209 if (voice->flags & VOICE_SSO_TIMING) { in sis_update_voice()
210 sis_update_sso(voice, voice->period_size); in sis_update_voice()
211 } else if (voice->flags & VOICE_SYNC_TIMING) { in sis_update_voice()
217 if (voice->vperiod > voice->period_size) { in sis_update_voice()
218 voice->vperiod -= voice->period_size; in sis_update_voice()
219 if (voice->vperiod < voice->period_size) in sis_update_voice()
220 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
222 sis_update_sso(voice, voice->period_size); in sis_update_voice()
231 sync = voice->sync_cso; in sis_update_voice()
232 sync -= readw(voice->sync_base + SIS_CAPTURE_DMA_FORMAT_CSO); in sis_update_voice()
233 if (sync > (voice->sync_buffer_size / 2)) in sis_update_voice()
234 sync -= voice->sync_buffer_size; in sis_update_voice()
244 sis_update_sso(voice, sync); in sis_update_voice()
264 voice->vperiod = voice->sync_period_size + 1; in sis_update_voice()
266 voice->vperiod = voice->sync_period_size + sync + 10; in sis_update_voice()
268 if (voice->vperiod < voice->buffer_size) { in sis_update_voice()
269 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
270 voice->vperiod = 0; in sis_update_voice()
272 sis_update_sso(voice, voice->period_size); in sis_update_voice()
274 sync = voice->sync_cso + voice->sync_period_size; in sis_update_voice()
275 if (sync >= voice->sync_buffer_size) in sis_update_voice()
276 sync -= voice->sync_buffer_size; in sis_update_voice()
277 voice->sync_cso = sync; in sis_update_voice()
280 snd_pcm_period_elapsed(voice->substream); in sis_update_voice()
283 static void sis_voice_irq(u32 status, struct voice *voice) in sis_voice_irq() argument
290 voice += bit; in sis_voice_irq()
291 sis_update_voice(voice); in sis_voice_irq()
292 voice++; in sis_voice_irq()
300 struct voice *voice; in sis_interrupt() local
330 voice = &sis->capture_voice; in sis_interrupt()
331 if (!voice->timing) in sis_interrupt()
332 snd_pcm_period_elapsed(voice->substream); in sis_interrupt()
388 static void sis_free_voice(struct sis7019 *sis, struct voice *voice) in sis_free_voice() argument
393 if (voice->timing) { in sis_free_voice()
395 voice->timing->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | in sis_free_voice()
397 voice->timing = NULL; in sis_free_voice()
399 voice->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | VOICE_SYNC_TIMING); in sis_free_voice()
403 static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis) in __sis_alloc_playback_voice()
406 struct voice *voice; in __sis_alloc_playback_voice() local
410 voice = &sis->voices[i]; in __sis_alloc_playback_voice()
411 if (voice->flags & VOICE_IN_USE) in __sis_alloc_playback_voice()
413 voice->flags |= VOICE_IN_USE; in __sis_alloc_playback_voice()
416 voice = NULL; in __sis_alloc_playback_voice()
419 return voice; in __sis_alloc_playback_voice()
422 static struct voice *sis_alloc_playback_voice(struct sis7019 *sis) in sis_alloc_playback_voice()
424 struct voice *voice; in sis_alloc_playback_voice() local
428 voice = __sis_alloc_playback_voice(sis); in sis_alloc_playback_voice()
431 return voice; in sis_alloc_playback_voice()
439 struct voice *voice = runtime->private_data; in sis_alloc_timing_voice() local
453 if (needed && !voice->timing) { in sis_alloc_timing_voice()
455 voice->timing = __sis_alloc_playback_voice(sis); in sis_alloc_timing_voice()
456 if (voice->timing) in sis_alloc_timing_voice()
459 if (!voice->timing) in sis_alloc_timing_voice()
461 voice->timing->substream = substream; in sis_alloc_timing_voice()
462 } else if (!needed && voice->timing) { in sis_alloc_timing_voice()
463 sis_free_voice(sis, voice); in sis_alloc_timing_voice()
464 voice->timing = NULL; in sis_alloc_timing_voice()
474 struct voice *voice; in sis_playback_open() local
476 voice = sis_alloc_playback_voice(sis); in sis_playback_open()
477 if (!voice) in sis_playback_open()
480 voice->substream = substream; in sis_playback_open()
481 runtime->private_data = voice; in sis_playback_open()
495 struct voice *voice = runtime->private_data; in sis_substream_close() local
497 sis_free_voice(sis, voice); in sis_substream_close()
504 struct voice *voice = runtime->private_data; in sis_pcm_playback_prepare() local
505 void __iomem *ctrl_base = voice->ctrl_base; in sis_pcm_playback_prepare()
506 void __iomem *wave_base = voice->wave_base; in sis_pcm_playback_prepare()
532 voice->flags |= VOICE_SSO_TIMING; in sis_pcm_playback_prepare()
533 voice->sso = runtime->period_size - 1; in sis_pcm_playback_prepare()
534 voice->period_size = runtime->period_size; in sis_pcm_playback_prepare()
535 voice->buffer_size = runtime->buffer_size; in sis_pcm_playback_prepare()
572 struct voice *voice; in sis_pcm_trigger() local
603 voice = s->runtime->private_data; in sis_pcm_trigger()
604 if (voice->flags & VOICE_CAPTURE) { in sis_pcm_trigger()
605 record |= 1 << voice->num; in sis_pcm_trigger()
606 voice = voice->timing; in sis_pcm_trigger()
612 if (voice) in sis_pcm_trigger()
613 play[voice->num / 32] |= 1 << (voice->num & 0x1f); in sis_pcm_trigger()
639 struct voice *voice = runtime->private_data; in sis_pcm_pointer() local
642 cso = readl(voice->ctrl_base + SIS_PLAY_DMA_FORMAT_CSO); in sis_pcm_pointer()
651 struct voice *voice = &sis->capture_voice; in sis_capture_open() local
658 if (voice->flags & VOICE_IN_USE) in sis_capture_open()
659 voice = NULL; in sis_capture_open()
661 voice->flags |= VOICE_IN_USE; in sis_capture_open()
664 if (!voice) in sis_capture_open()
667 voice->substream = substream; in sis_capture_open()
668 runtime->private_data = voice; in sis_capture_open()
697 static void sis_prepare_timing_voice(struct voice *voice, in sis_prepare_timing_voice() argument
702 struct voice *timing = voice->timing; in sis_prepare_timing_voice()
756 timing->sync_base = voice->ctrl_base; in sis_prepare_timing_voice()
803 struct voice *voice = runtime->private_data; in sis_pcm_capture_prepare() local
804 void __iomem *rec_base = voice->ctrl_base; in sis_pcm_capture_prepare()
827 if (voice->timing) { in sis_pcm_capture_prepare()
828 sis_prepare_timing_voice(voice, substream); in sis_pcm_capture_prepare()
1264 struct voice *voice; in sis_chip_create() local
1320 voice = &sis->voices[i]; in sis_chip_create()
1321 voice->num = i; in sis_chip_create()
1322 voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i); in sis_chip_create()
1323 voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i); in sis_chip_create()
1326 voice = &sis->capture_voice; in sis_chip_create()
1327 voice->flags = VOICE_CAPTURE; in sis_chip_create()
1328 voice->num = SIS_CAPTURE_CHAN_AC97_PCM_IN; in sis_chip_create()
1329 voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num); in sis_chip_create()