Lines Matching refs:substream
270 static int pcm_open(struct snd_pcm_substream *substream, in pcm_open() argument
281 chip = snd_pcm_substream_chip(substream); in pcm_open()
282 runtime = substream->runtime; in pcm_open()
306 snd_pcm_set_sync(substream); in pcm_open()
331 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_open()
350 static int pcm_analog_in_open(struct snd_pcm_substream *substream) in pcm_analog_in_open() argument
352 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_analog_in_open()
355 if ((err = pcm_open(substream, num_analog_busses_in(chip) - in pcm_analog_in_open()
356 substream->number)) < 0) in pcm_analog_in_open()
358 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_analog_in_open()
363 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_analog_in_open()
379 static int pcm_analog_out_open(struct snd_pcm_substream *substream) in pcm_analog_out_open() argument
381 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_analog_out_open()
389 if ((err = pcm_open(substream, max_channels - substream->number)) < 0) in pcm_analog_out_open()
391 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_analog_out_open()
397 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_analog_out_open()
416 static int pcm_digital_in_open(struct snd_pcm_substream *substream) in pcm_digital_in_open() argument
418 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_digital_in_open()
421 max_channels = num_digital_busses_in(chip) - substream->number; in pcm_digital_in_open()
424 err = pcm_open(substream, max_channels); in pcm_digital_in_open()
428 err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT); in pcm_digital_in_open()
433 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_digital_in_open()
438 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_digital_in_open()
457 static int pcm_digital_out_open(struct snd_pcm_substream *substream) in pcm_digital_out_open() argument
459 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_digital_out_open()
462 max_channels = num_digital_busses_out(chip) - substream->number; in pcm_digital_out_open()
465 err = pcm_open(substream, max_channels); in pcm_digital_out_open()
469 err = pcm_open(substream, max_channels - ECHOCARD_HAS_ADAT); in pcm_digital_out_open()
474 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_digital_out_open()
480 if ((err = snd_pcm_hw_rule_add(substream->runtime, 0, in pcm_digital_out_open()
500 static int pcm_close(struct snd_pcm_substream *substream) in pcm_close() argument
502 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_close()
526 static int init_engine(struct snd_pcm_substream *substream, in init_engine() argument
534 chip = snd_pcm_substream_chip(substream); in init_engine()
535 pipe = (struct audiopipe *) substream->runtime->private_data; in init_engine()
545 chip->substream[pipe->index] = NULL; in init_engine()
562 err = snd_pcm_lib_malloc_pages(substream, in init_engine()
582 addr = snd_pcm_sgbuf_get_addr(substream, offs); in init_engine()
611 chip->substream[pipe_index] = substream; in init_engine()
621 static int pcm_analog_in_hw_params(struct snd_pcm_substream *substream, in pcm_analog_in_hw_params() argument
624 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_analog_in_hw_params()
626 return init_engine(substream, hw_params, px_analog_in(chip) + in pcm_analog_in_hw_params()
627 substream->number, params_channels(hw_params)); in pcm_analog_in_hw_params()
632 static int pcm_analog_out_hw_params(struct snd_pcm_substream *substream, in pcm_analog_out_hw_params() argument
635 return init_engine(substream, hw_params, substream->number, in pcm_analog_out_hw_params()
643 static int pcm_digital_in_hw_params(struct snd_pcm_substream *substream, in pcm_digital_in_hw_params() argument
646 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_digital_in_hw_params()
648 return init_engine(substream, hw_params, px_digital_in(chip) + in pcm_digital_in_hw_params()
649 substream->number, params_channels(hw_params)); in pcm_digital_in_hw_params()
655 static int pcm_digital_out_hw_params(struct snd_pcm_substream *substream, in pcm_digital_out_hw_params() argument
658 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_digital_out_hw_params()
660 return init_engine(substream, hw_params, px_digital_out(chip) + in pcm_digital_out_hw_params()
661 substream->number, params_channels(hw_params)); in pcm_digital_out_hw_params()
669 static int pcm_hw_free(struct snd_pcm_substream *substream) in pcm_hw_free() argument
674 chip = snd_pcm_substream_chip(substream); in pcm_hw_free()
675 pipe = (struct audiopipe *) substream->runtime->private_data; in pcm_hw_free()
681 chip->substream[pipe->index] = NULL; in pcm_hw_free()
686 snd_pcm_lib_free_pages(substream); in pcm_hw_free()
692 static int pcm_prepare(struct snd_pcm_substream *substream) in pcm_prepare() argument
694 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_prepare()
695 struct snd_pcm_runtime *runtime = substream->runtime; in pcm_prepare()
736 static int pcm_trigger(struct snd_pcm_substream *substream, int cmd) in pcm_trigger() argument
738 struct echoaudio *chip = snd_pcm_substream_chip(substream); in pcm_trigger()
739 struct snd_pcm_runtime *runtime = substream->runtime; in pcm_trigger()
745 snd_pcm_group_for_each_entry(s, substream) { in pcm_trigger()
747 if (s == chip->substream[i]) { in pcm_trigger()
749 snd_pcm_trigger_done(s, substream); in pcm_trigger()
761 pipe = chip->substream[i]->runtime->private_data; in pcm_trigger()
783 pipe = chip->substream[i]->runtime->private_data; in pcm_trigger()
792 pipe = chip->substream[i]->runtime->private_data; in pcm_trigger()
807 static snd_pcm_uframes_t pcm_pointer(struct snd_pcm_substream *substream) in pcm_pointer() argument
809 struct snd_pcm_runtime *runtime = substream->runtime; in pcm_pointer()
816 bufsize = substream->runtime->buffer_size; in pcm_pointer()
817 pos = bytes_to_frames(substream->runtime, pipe->position); in pcm_pointer()
820 pipe->position -= frames_to_bytes(substream->runtime, bufsize); in pcm_pointer()
889 for (ss = pcm->streams[stream].substream; ss; ss = ss->next) { in snd_echo_preallocate_pages()
1825 struct snd_pcm_substream *substream; in snd_echo_interrupt() local
1837 substream = chip->substream[ss]; in snd_echo_interrupt()
1838 if (substream && ((struct audiopipe *)substream->runtime-> in snd_echo_interrupt()
1840 period = pcm_pointer(substream) / in snd_echo_interrupt()
1841 substream->runtime->period_size; in snd_echo_interrupt()
1845 snd_pcm_period_elapsed(substream); in snd_echo_interrupt()