Lines Matching refs:bebob

65 snd_bebob_stream_get_rate(struct snd_bebob *bebob, unsigned int *curr_rate)  in snd_bebob_stream_get_rate()  argument
72 err = avc_general_get_sig_fmt(bebob->unit, &tx_rate, in snd_bebob_stream_get_rate()
80 err = avc_general_get_sig_fmt(bebob->unit, &rx_rate, in snd_bebob_stream_get_rate()
91 err = avc_general_set_sig_fmt(bebob->unit, rx_rate, in snd_bebob_stream_get_rate()
98 snd_bebob_stream_set_rate(struct snd_bebob *bebob, unsigned int rate) in snd_bebob_stream_set_rate() argument
102 err = avc_general_set_sig_fmt(bebob->unit, rate, in snd_bebob_stream_set_rate()
107 err = avc_general_set_sig_fmt(bebob->unit, rate, in snd_bebob_stream_set_rate()
121 int snd_bebob_stream_get_clock_src(struct snd_bebob *bebob, in snd_bebob_stream_get_clock_src() argument
124 const struct snd_bebob_clock_spec *clk_spec = bebob->spec->clock; in snd_bebob_stream_get_clock_src()
132 err = clk_spec->get(bebob, &id); in snd_bebob_stream_get_clock_src()
134 dev_err(&bebob->unit->device, in snd_bebob_stream_get_clock_src()
140 dev_err(&bebob->unit->device, in snd_bebob_stream_get_clock_src()
155 if (bebob->sync_input_plug < 0) { in snd_bebob_stream_get_clock_src()
165 bebob->sync_input_plug); in snd_bebob_stream_get_clock_src()
166 err = avc_bridgeco_get_plug_input(bebob->unit, addr, input); in snd_bebob_stream_get_clock_src()
168 dev_err(&bebob->unit->device, in snd_bebob_stream_get_clock_src()
170 bebob->sync_input_plug, err); in snd_bebob_stream_get_clock_src()
223 err = avc_bridgeco_get_plug_type(bebob->unit, addr, in snd_bebob_stream_get_clock_src()
257 map_data_channels(struct snd_bebob *bebob, struct amdtp_stream *s) in map_data_channels() argument
274 if (s == &bebob->tx_stream) in map_data_channels()
280 err = avc_bridgeco_get_plug_ch_pos(bebob->unit, addr, buf, 256); in map_data_channels()
282 dev_err(&bebob->unit->device, in map_data_channels()
301 err = avc_bridgeco_get_plug_section_type(bebob->unit, addr, in map_data_channels()
304 dev_err(&bebob->unit->device, in map_data_channels()
380 init_both_connections(struct snd_bebob *bebob) in init_both_connections() argument
384 err = cmp_connection_init(&bebob->in_conn, in init_both_connections()
385 bebob->unit, CMP_INPUT, 0); in init_both_connections()
389 err = cmp_connection_init(&bebob->out_conn, in init_both_connections()
390 bebob->unit, CMP_OUTPUT, 0); in init_both_connections()
392 cmp_connection_destroy(&bebob->in_conn); in init_both_connections()
398 check_connection_used_by_others(struct snd_bebob *bebob, struct amdtp_stream *s) in check_connection_used_by_others() argument
404 if (s == &bebob->tx_stream) in check_connection_used_by_others()
405 conn = &bebob->out_conn; in check_connection_used_by_others()
407 conn = &bebob->in_conn; in check_connection_used_by_others()
411 dev_err(&bebob->unit->device, in check_connection_used_by_others()
422 make_both_connections(struct snd_bebob *bebob, unsigned int rate) in make_both_connections() argument
426 if (bebob->connected) in make_both_connections()
433 pcm_channels = bebob->tx_stream_formations[index].pcm; in make_both_connections()
434 midi_channels = bebob->tx_stream_formations[index].midi; in make_both_connections()
435 err = amdtp_am824_set_parameters(&bebob->tx_stream, rate, in make_both_connections()
441 pcm_channels = bebob->rx_stream_formations[index].pcm; in make_both_connections()
442 midi_channels = bebob->rx_stream_formations[index].midi; in make_both_connections()
443 err = amdtp_am824_set_parameters(&bebob->rx_stream, rate, in make_both_connections()
450 err = cmp_connection_establish(&bebob->out_conn, in make_both_connections()
451 amdtp_stream_get_max_payload(&bebob->tx_stream)); in make_both_connections()
454 err = cmp_connection_establish(&bebob->in_conn, in make_both_connections()
455 amdtp_stream_get_max_payload(&bebob->rx_stream)); in make_both_connections()
457 cmp_connection_break(&bebob->out_conn); in make_both_connections()
461 bebob->connected = true; in make_both_connections()
467 break_both_connections(struct snd_bebob *bebob) in break_both_connections() argument
469 cmp_connection_break(&bebob->in_conn); in break_both_connections()
470 cmp_connection_break(&bebob->out_conn); in break_both_connections()
472 bebob->connected = false; in break_both_connections()
475 if (bebob->maudio_special_quirk != NULL) in break_both_connections()
480 destroy_both_connections(struct snd_bebob *bebob) in destroy_both_connections() argument
482 cmp_connection_destroy(&bebob->in_conn); in destroy_both_connections()
483 cmp_connection_destroy(&bebob->out_conn); in destroy_both_connections()
487 start_stream(struct snd_bebob *bebob, struct amdtp_stream *stream, in start_stream() argument
493 if (stream == &bebob->rx_stream) in start_stream()
494 conn = &bebob->in_conn; in start_stream()
496 conn = &bebob->out_conn; in start_stream()
499 if (bebob->maudio_special_quirk == NULL) { in start_stream()
500 err = map_data_channels(bebob, stream); in start_stream()
513 int snd_bebob_stream_init_duplex(struct snd_bebob *bebob) in snd_bebob_stream_init_duplex() argument
517 err = init_both_connections(bebob); in snd_bebob_stream_init_duplex()
521 err = amdtp_am824_init(&bebob->tx_stream, bebob->unit, in snd_bebob_stream_init_duplex()
524 amdtp_stream_destroy(&bebob->tx_stream); in snd_bebob_stream_init_duplex()
525 destroy_both_connections(bebob); in snd_bebob_stream_init_duplex()
535 if (bebob->version > 2) in snd_bebob_stream_init_duplex()
536 bebob->tx_stream.flags |= CIP_EMPTY_HAS_WRONG_DBC | in snd_bebob_stream_init_duplex()
544 if (bebob->maudio_special_quirk) in snd_bebob_stream_init_duplex()
545 bebob->tx_stream.flags |= CIP_EMPTY_HAS_WRONG_DBC; in snd_bebob_stream_init_duplex()
547 err = amdtp_am824_init(&bebob->rx_stream, bebob->unit, in snd_bebob_stream_init_duplex()
550 amdtp_stream_destroy(&bebob->tx_stream); in snd_bebob_stream_init_duplex()
551 amdtp_stream_destroy(&bebob->rx_stream); in snd_bebob_stream_init_duplex()
552 destroy_both_connections(bebob); in snd_bebob_stream_init_duplex()
558 int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate) in snd_bebob_stream_start_duplex() argument
560 const struct snd_bebob_rate_spec *rate_spec = bebob->spec->rate; in snd_bebob_stream_start_duplex()
565 if (bebob->substreams_counter == 0) in snd_bebob_stream_start_duplex()
572 err = check_connection_used_by_others(bebob, &bebob->rx_stream); in snd_bebob_stream_start_duplex()
582 if (amdtp_streaming_error(&bebob->rx_stream)) in snd_bebob_stream_start_duplex()
583 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
584 if (amdtp_streaming_error(&bebob->tx_stream)) in snd_bebob_stream_start_duplex()
585 amdtp_stream_stop(&bebob->tx_stream); in snd_bebob_stream_start_duplex()
586 if (!amdtp_stream_running(&bebob->rx_stream) && in snd_bebob_stream_start_duplex()
587 !amdtp_stream_running(&bebob->tx_stream)) in snd_bebob_stream_start_duplex()
588 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
591 err = rate_spec->get(bebob, &curr_rate); in snd_bebob_stream_start_duplex()
593 dev_err(&bebob->unit->device, in snd_bebob_stream_start_duplex()
600 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
601 amdtp_stream_stop(&bebob->tx_stream); in snd_bebob_stream_start_duplex()
602 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
606 if (!amdtp_stream_running(&bebob->rx_stream)) { in snd_bebob_stream_start_duplex()
614 if (bebob->maudio_special_quirk == NULL) { in snd_bebob_stream_start_duplex()
615 err = rate_spec->set(bebob, rate); in snd_bebob_stream_start_duplex()
617 dev_err(&bebob->unit->device, in snd_bebob_stream_start_duplex()
624 err = make_both_connections(bebob, rate); in snd_bebob_stream_start_duplex()
628 err = start_stream(bebob, &bebob->rx_stream, rate); in snd_bebob_stream_start_duplex()
630 dev_err(&bebob->unit->device, in snd_bebob_stream_start_duplex()
632 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
641 if (bebob->maudio_special_quirk != NULL) { in snd_bebob_stream_start_duplex()
642 err = rate_spec->set(bebob, rate); in snd_bebob_stream_start_duplex()
644 dev_err(&bebob->unit->device, in snd_bebob_stream_start_duplex()
647 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
648 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
654 if (!amdtp_stream_wait_callback(&bebob->rx_stream, in snd_bebob_stream_start_duplex()
656 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
657 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
664 if (!amdtp_stream_running(&bebob->tx_stream)) { in snd_bebob_stream_start_duplex()
665 err = start_stream(bebob, &bebob->tx_stream, rate); in snd_bebob_stream_start_duplex()
667 dev_err(&bebob->unit->device, in snd_bebob_stream_start_duplex()
669 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
670 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
675 if (!amdtp_stream_wait_callback(&bebob->tx_stream, in snd_bebob_stream_start_duplex()
677 amdtp_stream_stop(&bebob->tx_stream); in snd_bebob_stream_start_duplex()
678 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_start_duplex()
679 break_both_connections(bebob); in snd_bebob_stream_start_duplex()
687 void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob) in snd_bebob_stream_stop_duplex() argument
689 if (bebob->substreams_counter == 0) { in snd_bebob_stream_stop_duplex()
690 amdtp_stream_pcm_abort(&bebob->rx_stream); in snd_bebob_stream_stop_duplex()
691 amdtp_stream_stop(&bebob->rx_stream); in snd_bebob_stream_stop_duplex()
693 amdtp_stream_pcm_abort(&bebob->tx_stream); in snd_bebob_stream_stop_duplex()
694 amdtp_stream_stop(&bebob->tx_stream); in snd_bebob_stream_stop_duplex()
696 break_both_connections(bebob); in snd_bebob_stream_stop_duplex()
704 void snd_bebob_stream_destroy_duplex(struct snd_bebob *bebob) in snd_bebob_stream_destroy_duplex() argument
706 amdtp_stream_destroy(&bebob->rx_stream); in snd_bebob_stream_destroy_duplex()
707 amdtp_stream_destroy(&bebob->tx_stream); in snd_bebob_stream_destroy_duplex()
709 destroy_both_connections(bebob); in snd_bebob_stream_destroy_duplex()
788 fill_stream_formations(struct snd_bebob *bebob, enum avc_bridgeco_plug_dir dir, in fill_stream_formations() argument
802 formations = bebob->rx_stream_formations; in fill_stream_formations()
804 formations = bebob->tx_stream_formations; in fill_stream_formations()
810 err = avc_bridgeco_get_plug_strm_fmt(bebob->unit, addr, buf, in fill_stream_formations()
817 dev_err(&bebob->unit->device, in fill_stream_formations()
836 seek_msu_sync_input_plug(struct snd_bebob *bebob) in seek_msu_sync_input_plug() argument
844 err = avc_general_get_plug_info(bebob->unit, 0x0c, 0x00, 0x00, plugs); in seek_msu_sync_input_plug()
846 dev_err(&bebob->unit->device, in seek_msu_sync_input_plug()
853 bebob->sync_input_plug = -1; in seek_msu_sync_input_plug()
856 err = avc_bridgeco_get_plug_type(bebob->unit, addr, &type); in seek_msu_sync_input_plug()
858 dev_err(&bebob->unit->device, in seek_msu_sync_input_plug()
865 bebob->sync_input_plug = i; in seek_msu_sync_input_plug()
873 int snd_bebob_stream_discover(struct snd_bebob *bebob) in snd_bebob_stream_discover() argument
875 const struct snd_bebob_clock_spec *clk_spec = bebob->spec->clock; in snd_bebob_stream_discover()
882 err = avc_general_get_plug_info(bebob->unit, 0x1f, 0x07, 0x00, plugs); in snd_bebob_stream_discover()
884 dev_err(&bebob->unit->device, in snd_bebob_stream_discover()
901 err = avc_bridgeco_get_plug_type(bebob->unit, addr, &type); in snd_bebob_stream_discover()
903 dev_err(&bebob->unit->device, in snd_bebob_stream_discover()
910 err = fill_stream_formations(bebob, AVC_BRIDGECO_PLUG_DIR_IN, 0); in snd_bebob_stream_discover()
916 err = avc_bridgeco_get_plug_type(bebob->unit, addr, &type); in snd_bebob_stream_discover()
918 dev_err(&bebob->unit->device, in snd_bebob_stream_discover()
925 err = fill_stream_formations(bebob, AVC_BRIDGECO_PLUG_DIR_OUT, 0); in snd_bebob_stream_discover()
930 bebob->midi_input_ports = 0; in snd_bebob_stream_discover()
934 err = avc_bridgeco_get_plug_type(bebob->unit, addr, &type); in snd_bebob_stream_discover()
936 dev_err(&bebob->unit->device, in snd_bebob_stream_discover()
941 bebob->midi_input_ports++; in snd_bebob_stream_discover()
946 bebob->midi_output_ports = 0; in snd_bebob_stream_discover()
950 err = avc_bridgeco_get_plug_type(bebob->unit, addr, &type); in snd_bebob_stream_discover()
952 dev_err(&bebob->unit->device, in snd_bebob_stream_discover()
957 bebob->midi_output_ports++; in snd_bebob_stream_discover()
963 err = seek_msu_sync_input_plug(bebob); in snd_bebob_stream_discover()
968 void snd_bebob_stream_lock_changed(struct snd_bebob *bebob) in snd_bebob_stream_lock_changed() argument
970 bebob->dev_lock_changed = true; in snd_bebob_stream_lock_changed()
971 wake_up(&bebob->hwdep_wait); in snd_bebob_stream_lock_changed()
974 int snd_bebob_stream_lock_try(struct snd_bebob *bebob) in snd_bebob_stream_lock_try() argument
978 spin_lock_irq(&bebob->lock); in snd_bebob_stream_lock_try()
981 if (bebob->dev_lock_count < 0) { in snd_bebob_stream_lock_try()
987 if (bebob->dev_lock_count++ == 0) in snd_bebob_stream_lock_try()
988 snd_bebob_stream_lock_changed(bebob); in snd_bebob_stream_lock_try()
991 spin_unlock_irq(&bebob->lock); in snd_bebob_stream_lock_try()
995 void snd_bebob_stream_lock_release(struct snd_bebob *bebob) in snd_bebob_stream_lock_release() argument
997 spin_lock_irq(&bebob->lock); in snd_bebob_stream_lock_release()
999 if (WARN_ON(bebob->dev_lock_count <= 0)) in snd_bebob_stream_lock_release()
1001 if (--bebob->dev_lock_count == 0) in snd_bebob_stream_lock_release()
1002 snd_bebob_stream_lock_changed(bebob); in snd_bebob_stream_lock_release()
1004 spin_unlock_irq(&bebob->lock); in snd_bebob_stream_lock_release()