• Home
  • Raw
  • Download

Lines Matching refs:voice

69 struct voice {  struct
83 struct voice *timing; argument
121 struct voice voices[64];
122 struct voice capture_voice;
192 static void sis_update_sso(struct voice *voice, u16 period) in sis_update_sso() argument
194 void __iomem *base = voice->ctrl_base; in sis_update_sso()
196 voice->sso += period; in sis_update_sso()
197 if (voice->sso >= voice->buffer_size) in sis_update_sso()
198 voice->sso -= voice->buffer_size; in sis_update_sso()
201 if (voice->sso < 8) in sis_update_sso()
202 voice->sso = 8; in sis_update_sso()
205 writew(voice->sso & 0xffff, base + SIS_PLAY_DMA_SSO_ESO + 2); in sis_update_sso()
208 static void sis_update_voice(struct voice *voice) in sis_update_voice() argument
210 if (voice->flags & VOICE_SSO_TIMING) { in sis_update_voice()
211 sis_update_sso(voice, voice->period_size); in sis_update_voice()
212 } else if (voice->flags & VOICE_SYNC_TIMING) { in sis_update_voice()
218 if (voice->vperiod > voice->period_size) { in sis_update_voice()
219 voice->vperiod -= voice->period_size; in sis_update_voice()
220 if (voice->vperiod < voice->period_size) in sis_update_voice()
221 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
223 sis_update_sso(voice, voice->period_size); in sis_update_voice()
232 sync = voice->sync_cso; in sis_update_voice()
233 sync -= readw(voice->sync_base + SIS_CAPTURE_DMA_FORMAT_CSO); in sis_update_voice()
234 if (sync > (voice->sync_buffer_size / 2)) in sis_update_voice()
235 sync -= voice->sync_buffer_size; in sis_update_voice()
245 sis_update_sso(voice, sync); in sis_update_voice()
265 voice->vperiod = voice->sync_period_size + 1; in sis_update_voice()
267 voice->vperiod = voice->sync_period_size + sync + 10; in sis_update_voice()
269 if (voice->vperiod < voice->buffer_size) { in sis_update_voice()
270 sis_update_sso(voice, voice->vperiod); in sis_update_voice()
271 voice->vperiod = 0; in sis_update_voice()
273 sis_update_sso(voice, voice->period_size); in sis_update_voice()
275 sync = voice->sync_cso + voice->sync_period_size; in sis_update_voice()
276 if (sync >= voice->sync_buffer_size) in sis_update_voice()
277 sync -= voice->sync_buffer_size; in sis_update_voice()
278 voice->sync_cso = sync; in sis_update_voice()
281 snd_pcm_period_elapsed(voice->substream); in sis_update_voice()
284 static void sis_voice_irq(u32 status, struct voice *voice) in sis_voice_irq() argument
291 voice += bit; in sis_voice_irq()
292 sis_update_voice(voice); in sis_voice_irq()
293 voice++; in sis_voice_irq()
301 struct voice *voice; in sis_interrupt() local
331 voice = &sis->capture_voice; in sis_interrupt()
332 if (!voice->timing) in sis_interrupt()
333 snd_pcm_period_elapsed(voice->substream); in sis_interrupt()
389 static void sis_free_voice(struct sis7019 *sis, struct voice *voice) in sis_free_voice() argument
394 if (voice->timing) { in sis_free_voice()
396 voice->timing->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | in sis_free_voice()
398 voice->timing = NULL; in sis_free_voice()
400 voice->flags &= ~(VOICE_IN_USE | VOICE_SSO_TIMING | VOICE_SYNC_TIMING); in sis_free_voice()
404 static struct voice *__sis_alloc_playback_voice(struct sis7019 *sis) in __sis_alloc_playback_voice()
407 struct voice *voice; in __sis_alloc_playback_voice() local
411 voice = &sis->voices[i]; in __sis_alloc_playback_voice()
412 if (voice->flags & VOICE_IN_USE) in __sis_alloc_playback_voice()
414 voice->flags |= VOICE_IN_USE; in __sis_alloc_playback_voice()
417 voice = NULL; in __sis_alloc_playback_voice()
420 return voice; in __sis_alloc_playback_voice()
423 static struct voice *sis_alloc_playback_voice(struct sis7019 *sis) in sis_alloc_playback_voice()
425 struct voice *voice; in sis_alloc_playback_voice() local
429 voice = __sis_alloc_playback_voice(sis); in sis_alloc_playback_voice()
432 return voice; in sis_alloc_playback_voice()
440 struct voice *voice = runtime->private_data; in sis_alloc_timing_voice() local
454 if (needed && !voice->timing) { in sis_alloc_timing_voice()
456 voice->timing = __sis_alloc_playback_voice(sis); in sis_alloc_timing_voice()
457 if (voice->timing) in sis_alloc_timing_voice()
460 if (!voice->timing) in sis_alloc_timing_voice()
462 voice->timing->substream = substream; in sis_alloc_timing_voice()
463 } else if (!needed && voice->timing) { in sis_alloc_timing_voice()
464 sis_free_voice(sis, voice); in sis_alloc_timing_voice()
465 voice->timing = NULL; in sis_alloc_timing_voice()
475 struct voice *voice; in sis_playback_open() local
477 voice = sis_alloc_playback_voice(sis); in sis_playback_open()
478 if (!voice) in sis_playback_open()
481 voice->substream = substream; in sis_playback_open()
482 runtime->private_data = voice; in sis_playback_open()
496 struct voice *voice = runtime->private_data; in sis_substream_close() local
498 sis_free_voice(sis, voice); in sis_substream_close()
505 struct voice *voice = runtime->private_data; in sis_pcm_playback_prepare() local
506 void __iomem *ctrl_base = voice->ctrl_base; in sis_pcm_playback_prepare()
507 void __iomem *wave_base = voice->wave_base; in sis_pcm_playback_prepare()
533 voice->flags |= VOICE_SSO_TIMING; in sis_pcm_playback_prepare()
534 voice->sso = runtime->period_size - 1; in sis_pcm_playback_prepare()
535 voice->period_size = runtime->period_size; in sis_pcm_playback_prepare()
536 voice->buffer_size = runtime->buffer_size; in sis_pcm_playback_prepare()
573 struct voice *voice; in sis_pcm_trigger() local
604 voice = s->runtime->private_data; in sis_pcm_trigger()
605 if (voice->flags & VOICE_CAPTURE) { in sis_pcm_trigger()
606 record |= 1 << voice->num; in sis_pcm_trigger()
607 voice = voice->timing; in sis_pcm_trigger()
613 if (voice) in sis_pcm_trigger()
614 play[voice->num / 32] |= 1 << (voice->num & 0x1f); in sis_pcm_trigger()
640 struct voice *voice = runtime->private_data; in sis_pcm_pointer() local
643 cso = readl(voice->ctrl_base + SIS_PLAY_DMA_FORMAT_CSO); in sis_pcm_pointer()
652 struct voice *voice = &sis->capture_voice; in sis_capture_open() local
659 if (voice->flags & VOICE_IN_USE) in sis_capture_open()
660 voice = NULL; in sis_capture_open()
662 voice->flags |= VOICE_IN_USE; in sis_capture_open()
665 if (!voice) in sis_capture_open()
668 voice->substream = substream; in sis_capture_open()
669 runtime->private_data = voice; in sis_capture_open()
698 static void sis_prepare_timing_voice(struct voice *voice, in sis_prepare_timing_voice() argument
703 struct voice *timing = voice->timing; in sis_prepare_timing_voice()
757 timing->sync_base = voice->ctrl_base; in sis_prepare_timing_voice()
804 struct voice *voice = runtime->private_data; in sis_pcm_capture_prepare() local
805 void __iomem *rec_base = voice->ctrl_base; in sis_pcm_capture_prepare()
828 if (voice->timing) { in sis_pcm_capture_prepare()
829 sis_prepare_timing_voice(voice, substream); in sis_pcm_capture_prepare()
1282 struct voice *voice; in sis_chip_create() local
1342 voice = &sis->voices[i]; in sis_chip_create()
1343 voice->num = i; in sis_chip_create()
1344 voice->ctrl_base = SIS_PLAY_DMA_ADDR(sis->ioaddr, i); in sis_chip_create()
1345 voice->wave_base = SIS_WAVE_ADDR(sis->ioaddr, i); in sis_chip_create()
1348 voice = &sis->capture_voice; in sis_chip_create()
1349 voice->flags = VOICE_CAPTURE; in sis_chip_create()
1350 voice->num = SIS_CAPTURE_CHAN_AC97_PCM_IN; in sis_chip_create()
1351 voice->ctrl_base = SIS_CAPTURE_DMA_ADDR(sis->ioaddr, voice->num); in sis_chip_create()