Lines Matching refs:oxfw

42 static int set_rate(struct snd_oxfw *oxfw, unsigned int rate)  in set_rate()  argument
46 err = avc_general_set_sig_fmt(oxfw->unit, rate, in set_rate()
51 if (oxfw->has_output) in set_rate()
52 err = avc_general_set_sig_fmt(oxfw->unit, rate, in set_rate()
58 static int set_stream_format(struct snd_oxfw *oxfw, struct amdtp_stream *s, in set_stream_format() argument
67 if (s == &oxfw->tx_stream) { in set_stream_format()
68 formats = oxfw->tx_stream_formats; in set_stream_format()
71 formats = oxfw->rx_stream_formats; in set_stream_format()
88 if (oxfw->assumed) in set_stream_format()
89 return set_rate(oxfw, rate); in set_stream_format()
94 err = avc_stream_set_format(oxfw->unit, dir, 0, formats[i], len); in set_stream_format()
104 static void stop_stream(struct snd_oxfw *oxfw, struct amdtp_stream *stream) in stop_stream() argument
109 if (stream == &oxfw->tx_stream) in stop_stream()
110 cmp_connection_break(&oxfw->out_conn); in stop_stream()
112 cmp_connection_break(&oxfw->in_conn); in stop_stream()
115 static int start_stream(struct snd_oxfw *oxfw, struct amdtp_stream *stream, in start_stream() argument
124 if (stream == &oxfw->rx_stream) { in start_stream()
125 formats = oxfw->rx_stream_formats; in start_stream()
126 conn = &oxfw->in_conn; in start_stream()
128 formats = oxfw->tx_stream_formats; in start_stream()
129 conn = &oxfw->out_conn; in start_stream()
178 stop_stream(oxfw, stream); in start_stream()
185 static int check_connection_used_by_others(struct snd_oxfw *oxfw, in check_connection_used_by_others() argument
192 if (stream == &oxfw->tx_stream) in check_connection_used_by_others()
193 conn = &oxfw->out_conn; in check_connection_used_by_others()
195 conn = &oxfw->in_conn; in check_connection_used_by_others()
199 dev_err(&oxfw->unit->device, in check_connection_used_by_others()
209 int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw, in snd_oxfw_stream_init_simplex() argument
217 if (stream == &oxfw->tx_stream) { in snd_oxfw_stream_init_simplex()
218 conn = &oxfw->out_conn; in snd_oxfw_stream_init_simplex()
222 conn = &oxfw->in_conn; in snd_oxfw_stream_init_simplex()
227 err = cmp_connection_init(conn, oxfw->unit, c_dir, 0); in snd_oxfw_stream_init_simplex()
231 err = amdtp_am824_init(stream, oxfw->unit, s_dir, CIP_NONBLOCKING); in snd_oxfw_stream_init_simplex()
244 if (stream == &oxfw->tx_stream) { in snd_oxfw_stream_init_simplex()
245 oxfw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK | in snd_oxfw_stream_init_simplex()
247 if (oxfw->wrong_dbs) in snd_oxfw_stream_init_simplex()
248 oxfw->tx_stream.flags |= CIP_WRONG_DBS; in snd_oxfw_stream_init_simplex()
254 int snd_oxfw_stream_start_simplex(struct snd_oxfw *oxfw, in snd_oxfw_stream_start_simplex() argument
264 if (stream == &oxfw->tx_stream) { in snd_oxfw_stream_start_simplex()
265 substreams = oxfw->capture_substreams; in snd_oxfw_stream_start_simplex()
266 opposite = &oxfw->rx_stream; in snd_oxfw_stream_start_simplex()
267 opposite_substreams = oxfw->playback_substreams; in snd_oxfw_stream_start_simplex()
270 substreams = oxfw->playback_substreams; in snd_oxfw_stream_start_simplex()
271 opposite_substreams = oxfw->capture_substreams; in snd_oxfw_stream_start_simplex()
273 if (oxfw->has_output) in snd_oxfw_stream_start_simplex()
274 opposite = &oxfw->rx_stream; in snd_oxfw_stream_start_simplex()
288 err = check_connection_used_by_others(oxfw, stream); in snd_oxfw_stream_start_simplex()
294 stop_stream(oxfw, stream); in snd_oxfw_stream_start_simplex()
296 err = snd_oxfw_stream_get_current_formation(oxfw, dir, &formation); in snd_oxfw_stream_start_simplex()
306 err = check_connection_used_by_others(oxfw, opposite); in snd_oxfw_stream_start_simplex()
309 stop_stream(oxfw, opposite); in snd_oxfw_stream_start_simplex()
311 stop_stream(oxfw, stream); in snd_oxfw_stream_start_simplex()
313 err = set_stream_format(oxfw, stream, rate, pcm_channels); in snd_oxfw_stream_start_simplex()
315 dev_err(&oxfw->unit->device, in snd_oxfw_stream_start_simplex()
323 err = start_stream(oxfw, opposite, rate, 0); in snd_oxfw_stream_start_simplex()
325 dev_err(&oxfw->unit->device, in snd_oxfw_stream_start_simplex()
334 err = start_stream(oxfw, stream, rate, pcm_channels); in snd_oxfw_stream_start_simplex()
336 dev_err(&oxfw->unit->device, in snd_oxfw_stream_start_simplex()
343 void snd_oxfw_stream_stop_simplex(struct snd_oxfw *oxfw, in snd_oxfw_stream_stop_simplex() argument
346 if (((stream == &oxfw->tx_stream) && (oxfw->capture_substreams > 0)) || in snd_oxfw_stream_stop_simplex()
347 ((stream == &oxfw->rx_stream) && (oxfw->playback_substreams > 0))) in snd_oxfw_stream_stop_simplex()
350 stop_stream(oxfw, stream); in snd_oxfw_stream_stop_simplex()
357 void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw, in snd_oxfw_stream_destroy_simplex() argument
362 if (stream == &oxfw->tx_stream) in snd_oxfw_stream_destroy_simplex()
363 conn = &oxfw->out_conn; in snd_oxfw_stream_destroy_simplex()
365 conn = &oxfw->in_conn; in snd_oxfw_stream_destroy_simplex()
371 void snd_oxfw_stream_update_simplex(struct snd_oxfw *oxfw, in snd_oxfw_stream_update_simplex() argument
376 if (stream == &oxfw->tx_stream) in snd_oxfw_stream_update_simplex()
377 conn = &oxfw->out_conn; in snd_oxfw_stream_update_simplex()
379 conn = &oxfw->in_conn; in snd_oxfw_stream_update_simplex()
382 stop_stream(oxfw, stream); in snd_oxfw_stream_update_simplex()
387 int snd_oxfw_stream_get_current_formation(struct snd_oxfw *oxfw, in snd_oxfw_stream_get_current_formation() argument
400 err = avc_stream_get_format_single(oxfw->unit, dir, 0, format, &len); in snd_oxfw_stream_get_current_formation()
497 assume_stream_formats(struct snd_oxfw *oxfw, enum avc_general_plug_dir dir, in assume_stream_formats() argument
506 err = avc_stream_get_format_single(oxfw->unit, dir, pid, buf, len); in assume_stream_formats()
508 dev_err(&oxfw->unit->device, in assume_stream_formats()
532 err = avc_general_inquiry_sig_fmt(oxfw->unit, in assume_stream_formats()
548 oxfw->assumed = true; in assume_stream_formats()
553 static int fill_stream_formats(struct snd_oxfw *oxfw, in fill_stream_formats() argument
567 formats = oxfw->tx_stream_formats; in fill_stream_formats()
569 formats = oxfw->rx_stream_formats; in fill_stream_formats()
573 err = avc_stream_get_format_list(oxfw->unit, dir, 0, buf, &len, 0); in fill_stream_formats()
577 err = assume_stream_formats(oxfw, dir, pid, buf, &len, in fill_stream_formats()
581 dev_err(&oxfw->unit->device, in fill_stream_formats()
609 err = avc_stream_get_format_list(oxfw->unit, dir, 0, in fill_stream_formats()
616 dev_err(&oxfw->unit->device, in fill_stream_formats()
629 int snd_oxfw_stream_discover(struct snd_oxfw *oxfw) in snd_oxfw_stream_discover() argument
638 err = avc_general_get_plug_info(oxfw->unit, 0x1f, 0x07, 0x00, plugs); in snd_oxfw_stream_discover()
640 dev_err(&oxfw->unit->device, in snd_oxfw_stream_discover()
651 err = fill_stream_formats(oxfw, AVC_GENERAL_PLUG_DIR_OUT, 0); in snd_oxfw_stream_discover()
656 format = oxfw->tx_stream_formats[i]; in snd_oxfw_stream_discover()
665 oxfw->midi_input_ports = 1; in snd_oxfw_stream_discover()
668 oxfw->has_output = true; in snd_oxfw_stream_discover()
673 err = fill_stream_formats(oxfw, AVC_GENERAL_PLUG_DIR_IN, 0); in snd_oxfw_stream_discover()
678 format = oxfw->rx_stream_formats[i]; in snd_oxfw_stream_discover()
687 oxfw->midi_output_ports = 1; in snd_oxfw_stream_discover()
694 void snd_oxfw_stream_lock_changed(struct snd_oxfw *oxfw) in snd_oxfw_stream_lock_changed() argument
696 oxfw->dev_lock_changed = true; in snd_oxfw_stream_lock_changed()
697 wake_up(&oxfw->hwdep_wait); in snd_oxfw_stream_lock_changed()
700 int snd_oxfw_stream_lock_try(struct snd_oxfw *oxfw) in snd_oxfw_stream_lock_try() argument
704 spin_lock_irq(&oxfw->lock); in snd_oxfw_stream_lock_try()
707 if (oxfw->dev_lock_count < 0) { in snd_oxfw_stream_lock_try()
713 if (oxfw->dev_lock_count++ == 0) in snd_oxfw_stream_lock_try()
714 snd_oxfw_stream_lock_changed(oxfw); in snd_oxfw_stream_lock_try()
717 spin_unlock_irq(&oxfw->lock); in snd_oxfw_stream_lock_try()
721 void snd_oxfw_stream_lock_release(struct snd_oxfw *oxfw) in snd_oxfw_stream_lock_release() argument
723 spin_lock_irq(&oxfw->lock); in snd_oxfw_stream_lock_release()
725 if (WARN_ON(oxfw->dev_lock_count <= 0)) in snd_oxfw_stream_lock_release()
727 if (--oxfw->dev_lock_count == 0) in snd_oxfw_stream_lock_release()
728 snd_oxfw_stream_lock_changed(oxfw); in snd_oxfw_stream_lock_release()
730 spin_unlock_irq(&oxfw->lock); in snd_oxfw_stream_lock_release()