Lines Matching refs:apcm

129 atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm);
136 static int ct_map_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm) in ct_map_audio_buffer() argument
141 if (!apcm->substream) in ct_map_audio_buffer()
144 runtime = apcm->substream->runtime; in ct_map_audio_buffer()
147 apcm->vm_block = vm->map(vm, apcm->substream, runtime->dma_bytes); in ct_map_audio_buffer()
149 if (!apcm->vm_block) in ct_map_audio_buffer()
155 static void ct_unmap_audio_buffer(struct ct_atc *atc, struct ct_atc_pcm *apcm) in ct_unmap_audio_buffer() argument
159 if (!apcm->vm_block) in ct_unmap_audio_buffer()
164 vm->unmap(vm, apcm->vm_block); in ct_unmap_audio_buffer()
166 apcm->vm_block = NULL; in ct_unmap_audio_buffer()
243 static int atc_pcm_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_playback_prepare() argument
252 int n_amixer = apcm->substream->runtime->channels, i = 0; in atc_pcm_playback_prepare()
253 int device = apcm->substream->pcm->device; in atc_pcm_playback_prepare()
257 atc_pcm_release_resources(atc, apcm); in atc_pcm_playback_prepare()
260 desc.multi = apcm->substream->runtime->channels; in atc_pcm_playback_prepare()
263 err = src_mgr->get_src(src_mgr, &desc, (struct src **)&apcm->src); in atc_pcm_playback_prepare()
267 pitch = atc_get_pitch(apcm->substream->runtime->rate, in atc_pcm_playback_prepare()
269 src = apcm->src; in atc_pcm_playback_prepare()
272 src->ops->set_sf(src, convert_format(apcm->substream->runtime->format, in atc_pcm_playback_prepare()
278 apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); in atc_pcm_playback_prepare()
279 if (!apcm->amixers) { in atc_pcm_playback_prepare()
284 for (i = 0, apcm->n_amixer = 0; i < n_amixer; i++) { in atc_pcm_playback_prepare()
286 (struct amixer **)&apcm->amixers[i]); in atc_pcm_playback_prepare()
290 apcm->n_amixer++; in atc_pcm_playback_prepare()
294 err = ct_map_audio_buffer(atc, apcm); in atc_pcm_playback_prepare()
299 src = apcm->src; in atc_pcm_playback_prepare()
301 amixer = apcm->amixers[i]; in atc_pcm_playback_prepare()
308 src = apcm->src; in atc_pcm_playback_prepare()
311 ct_timer_prepare(apcm->timer); in atc_pcm_playback_prepare()
316 atc_pcm_release_resources(atc, apcm); in atc_pcm_playback_prepare()
321 atc_pcm_release_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_release_resources() argument
330 if (apcm->srcimps) { in atc_pcm_release_resources()
331 for (i = 0; i < apcm->n_srcimp; i++) { in atc_pcm_release_resources()
332 srcimp = apcm->srcimps[i]; in atc_pcm_release_resources()
335 apcm->srcimps[i] = NULL; in atc_pcm_release_resources()
337 kfree(apcm->srcimps); in atc_pcm_release_resources()
338 apcm->srcimps = NULL; in atc_pcm_release_resources()
341 if (apcm->srccs) { in atc_pcm_release_resources()
342 for (i = 0; i < apcm->n_srcc; i++) { in atc_pcm_release_resources()
343 src_mgr->put_src(src_mgr, apcm->srccs[i]); in atc_pcm_release_resources()
344 apcm->srccs[i] = NULL; in atc_pcm_release_resources()
346 kfree(apcm->srccs); in atc_pcm_release_resources()
347 apcm->srccs = NULL; in atc_pcm_release_resources()
350 if (apcm->amixers) { in atc_pcm_release_resources()
351 for (i = 0; i < apcm->n_amixer; i++) { in atc_pcm_release_resources()
352 amixer_mgr->put_amixer(amixer_mgr, apcm->amixers[i]); in atc_pcm_release_resources()
353 apcm->amixers[i] = NULL; in atc_pcm_release_resources()
355 kfree(apcm->amixers); in atc_pcm_release_resources()
356 apcm->amixers = NULL; in atc_pcm_release_resources()
359 if (apcm->mono) { in atc_pcm_release_resources()
360 sum_mgr->put_sum(sum_mgr, apcm->mono); in atc_pcm_release_resources()
361 apcm->mono = NULL; in atc_pcm_release_resources()
364 if (apcm->src) { in atc_pcm_release_resources()
365 src_mgr->put_src(src_mgr, apcm->src); in atc_pcm_release_resources()
366 apcm->src = NULL; in atc_pcm_release_resources()
369 if (apcm->vm_block) { in atc_pcm_release_resources()
371 ct_unmap_audio_buffer(atc, apcm); in atc_pcm_release_resources()
372 apcm->vm_block = NULL; in atc_pcm_release_resources()
378 static int atc_pcm_playback_start(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_playback_start() argument
381 struct src *src = apcm->src; in atc_pcm_playback_start()
383 if (apcm->started) in atc_pcm_playback_start()
385 apcm->started = 1; in atc_pcm_playback_start()
390 src->ops->set_sa(src, apcm->vm_block->addr); in atc_pcm_playback_start()
391 src->ops->set_la(src, apcm->vm_block->addr + apcm->vm_block->size); in atc_pcm_playback_start()
392 src->ops->set_ca(src, apcm->vm_block->addr + max_cisz); in atc_pcm_playback_start()
399 ct_timer_start(apcm->timer); in atc_pcm_playback_start()
403 static int atc_pcm_stop(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_stop() argument
408 ct_timer_stop(apcm->timer); in atc_pcm_stop()
410 src = apcm->src; in atc_pcm_stop()
415 if (apcm->srccs) { in atc_pcm_stop()
416 for (i = 0; i < apcm->n_srcc; i++) { in atc_pcm_stop()
417 src = apcm->srccs[i]; in atc_pcm_stop()
424 apcm->started = 0; in atc_pcm_stop()
430 atc_pcm_playback_position(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_playback_position() argument
432 struct src *src = apcm->src; in atc_pcm_playback_position()
440 if (position < apcm->vm_block->addr) { in atc_pcm_playback_position()
443 position, apcm->vm_block->addr, apcm->vm_block->size); in atc_pcm_playback_position()
444 position = apcm->vm_block->addr; in atc_pcm_playback_position()
447 size = apcm->vm_block->size; in atc_pcm_playback_position()
451 return (position + size - max_cisz - apcm->vm_block->addr) % size; in atc_pcm_playback_position()
462 static void setup_src_node_conf(struct ct_atc *atc, struct ct_atc_pcm *apcm, in setup_src_node_conf() argument
469 apcm->substream->runtime->rate); in setup_src_node_conf()
473 *n_srcc = apcm->substream->runtime->channels; in setup_src_node_conf()
486 apcm->substream->runtime->rate); in setup_src_node_conf()
489 *n_srcc = apcm->substream->runtime->channels * 2; in setup_src_node_conf()
497 *n_srcc = apcm->substream->runtime->channels; in setup_src_node_conf()
503 atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_capture_get_resources() argument
521 atc_pcm_release_resources(atc, apcm); in atc_pcm_capture_get_resources()
526 multi = apcm->substream->runtime->channels; in atc_pcm_capture_get_resources()
530 apcm->substream->runtime->rate); in atc_pcm_capture_get_resources()
532 setup_src_node_conf(atc, apcm, src_node_conf, &n_srcc); in atc_pcm_capture_get_resources()
546 apcm->srccs = kzalloc(sizeof(void *)*n_srcc, GFP_KERNEL); in atc_pcm_capture_get_resources()
547 if (!apcm->srccs) in atc_pcm_capture_get_resources()
551 apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); in atc_pcm_capture_get_resources()
552 if (!apcm->amixers) { in atc_pcm_capture_get_resources()
557 apcm->srcimps = kzalloc(sizeof(void *)*n_srcimp, GFP_KERNEL); in atc_pcm_capture_get_resources()
558 if (!apcm->srcimps) { in atc_pcm_capture_get_resources()
566 for (i = 0, apcm->n_srcc = 0; i < n_srcc; i++) { in atc_pcm_capture_get_resources()
569 (struct src **)&apcm->srccs[i]); in atc_pcm_capture_get_resources()
573 src = apcm->srccs[i]; in atc_pcm_capture_get_resources()
579 apcm->n_srcc++; in atc_pcm_capture_get_resources()
583 for (i = 0, apcm->n_amixer = 0; i < n_amixer; i++) { in atc_pcm_capture_get_resources()
592 (struct amixer **)&apcm->amixers[i]); in atc_pcm_capture_get_resources()
596 apcm->n_amixer++; in atc_pcm_capture_get_resources()
601 err = sum_mgr->get_sum(sum_mgr, &sum_dsc, (struct sum **)&apcm->mono); in atc_pcm_capture_get_resources()
606 apcm->substream->runtime->rate); in atc_pcm_capture_get_resources()
608 for (i = 0, apcm->n_srcimp = 0; i < n_srcimp; i++) { in atc_pcm_capture_get_resources()
620 apcm->srcimps[i] = srcimp; in atc_pcm_capture_get_resources()
621 apcm->n_srcimp++; in atc_pcm_capture_get_resources()
625 src_dsc.multi = apcm->substream->runtime->channels; in atc_pcm_capture_get_resources()
628 err = src_mgr->get_src(src_mgr, &src_dsc, (struct src **)&apcm->src); in atc_pcm_capture_get_resources()
632 src = apcm->src; in atc_pcm_capture_get_resources()
636 err = ct_map_audio_buffer(atc, apcm); in atc_pcm_capture_get_resources()
643 atc_pcm_release_resources(atc, apcm); in atc_pcm_capture_get_resources()
647 static int atc_pcm_capture_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_capture_prepare() argument
659 atc_pcm_release_resources(atc, apcm); in atc_pcm_capture_prepare()
662 err = atc_pcm_capture_get_resources(atc, apcm); in atc_pcm_capture_prepare()
670 multi = apcm->substream->runtime->channels; in atc_pcm_capture_prepare()
672 mono = apcm->mono; in atc_pcm_capture_prepare()
674 amixer = apcm->amixers[i]; in atc_pcm_capture_prepare()
683 for (i = 0; i < apcm->n_srcc; i++) { in atc_pcm_capture_prepare()
684 src = apcm->srccs[i]; in atc_pcm_capture_prepare()
685 srcimp = apcm->srcimps[imp_base+i]; in atc_pcm_capture_prepare()
686 amixer = apcm->amixers[mix_base+i]; in atc_pcm_capture_prepare()
693 apcm->substream->runtime->rate); in atc_pcm_capture_prepare()
701 amixer = apcm->amixers[apcm->n_srcc+j*multi+i]; in atc_pcm_capture_prepare()
708 srcimp = apcm->srcimps[apcm->n_srcc+j*multi+i]; in atc_pcm_capture_prepare()
709 srcimp->ops->map(srcimp, apcm->src, in atc_pcm_capture_prepare()
715 srcimp = apcm->srcimps[apcm->n_srcc+i]; in atc_pcm_capture_prepare()
716 srcimp->ops->map(srcimp, apcm->src, out_ports[i]); in atc_pcm_capture_prepare()
720 ct_timer_prepare(apcm->timer); in atc_pcm_capture_prepare()
725 static int atc_pcm_capture_start(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_capture_start() argument
731 if (apcm->started) in atc_pcm_capture_start()
734 apcm->started = 1; in atc_pcm_capture_start()
735 multi = apcm->substream->runtime->channels; in atc_pcm_capture_start()
737 for (i = 0; i < apcm->n_srcc; i++) { in atc_pcm_capture_start()
738 src = apcm->srccs[i]; in atc_pcm_capture_start()
744 src = apcm->src; in atc_pcm_capture_start()
745 src->ops->set_sf(src, convert_format(apcm->substream->runtime->format, in atc_pcm_capture_start()
747 src->ops->set_sa(src, apcm->vm_block->addr); in atc_pcm_capture_start()
748 src->ops->set_la(src, apcm->vm_block->addr + apcm->vm_block->size); in atc_pcm_capture_start()
749 src->ops->set_ca(src, apcm->vm_block->addr); in atc_pcm_capture_start()
756 for (i = 0; i < apcm->n_srcc; i++) { in atc_pcm_capture_start()
757 src = apcm->srccs[i]; in atc_pcm_capture_start()
762 src = apcm->src; in atc_pcm_capture_start()
771 ct_timer_start(apcm->timer); in atc_pcm_capture_start()
776 atc_pcm_capture_position(struct ct_atc *atc, struct ct_atc_pcm *apcm) in atc_pcm_capture_position() argument
778 struct src *src = apcm->src; in atc_pcm_capture_position()
782 return src->ops->get_ca(src) - apcm->vm_block->addr; in atc_pcm_capture_position()
786 struct ct_atc_pcm *apcm) in spdif_passthru_playback_get_resources() argument
794 int n_amixer = apcm->substream->runtime->channels, i; in spdif_passthru_playback_get_resources()
798 atc_pcm_release_resources(atc, apcm); in spdif_passthru_playback_get_resources()
801 desc.multi = apcm->substream->runtime->channels; in spdif_passthru_playback_get_resources()
803 while (apcm->substream->runtime->rate > (rsr * desc.msr)) in spdif_passthru_playback_get_resources()
807 err = src_mgr->get_src(src_mgr, &desc, (struct src **)&apcm->src); in spdif_passthru_playback_get_resources()
811 pitch = atc_get_pitch(apcm->substream->runtime->rate, (rsr * desc.msr)); in spdif_passthru_playback_get_resources()
812 src = apcm->src; in spdif_passthru_playback_get_resources()
815 src->ops->set_sf(src, convert_format(apcm->substream->runtime->format, in spdif_passthru_playback_get_resources()
822 apcm->amixers = kzalloc(sizeof(void *)*n_amixer, GFP_KERNEL); in spdif_passthru_playback_get_resources()
823 if (!apcm->amixers) { in spdif_passthru_playback_get_resources()
828 for (i = 0, apcm->n_amixer = 0; i < n_amixer; i++) { in spdif_passthru_playback_get_resources()
830 (struct amixer **)&apcm->amixers[i]); in spdif_passthru_playback_get_resources()
834 apcm->n_amixer++; in spdif_passthru_playback_get_resources()
838 err = ct_map_audio_buffer(atc, apcm); in spdif_passthru_playback_get_resources()
845 atc_pcm_release_resources(atc, apcm); in spdif_passthru_playback_get_resources()
859 spdif_passthru_playback_setup(struct ct_atc *atc, struct ct_atc_pcm *apcm) in spdif_passthru_playback_setup() argument
862 unsigned int rate = apcm->substream->runtime->rate; in spdif_passthru_playback_setup()
897 spdif_passthru_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm) in spdif_passthru_playback_prepare() argument
905 atc_pcm_release_resources(atc, apcm); in spdif_passthru_playback_prepare()
909 err = spdif_passthru_playback_setup(atc, apcm); in spdif_passthru_playback_prepare()
914 err = spdif_passthru_playback_get_resources(atc, apcm); in spdif_passthru_playback_prepare()
919 src = apcm->src; in spdif_passthru_playback_prepare()
920 for (i = 0; i < apcm->n_amixer; i++) { in spdif_passthru_playback_prepare()
921 amixer = apcm->amixers[i]; in spdif_passthru_playback_prepare()
925 src = apcm->src; in spdif_passthru_playback_prepare()
930 amixer = apcm->amixers[0]; in spdif_passthru_playback_prepare()
932 amixer = apcm->amixers[1]; in spdif_passthru_playback_prepare()
936 ct_timer_prepare(apcm->timer); in spdif_passthru_playback_prepare()