Lines Matching refs:dg00x

31 int snd_dg00x_stream_get_local_rate(struct snd_dg00x *dg00x, unsigned int *rate)  in snd_dg00x_stream_get_local_rate()  argument
37 err = snd_fw_transaction(dg00x->unit, TCODE_READ_QUADLET_REQUEST, in snd_dg00x_stream_get_local_rate()
52 int snd_dg00x_stream_set_local_rate(struct snd_dg00x *dg00x, unsigned int rate) in snd_dg00x_stream_set_local_rate() argument
65 return snd_fw_transaction(dg00x->unit, TCODE_WRITE_QUADLET_REQUEST, in snd_dg00x_stream_set_local_rate()
70 int snd_dg00x_stream_get_clock(struct snd_dg00x *dg00x, in snd_dg00x_stream_get_clock() argument
76 err = snd_fw_transaction(dg00x->unit, TCODE_READ_QUADLET_REQUEST, in snd_dg00x_stream_get_clock()
89 int snd_dg00x_stream_check_external_clock(struct snd_dg00x *dg00x, bool *detect) in snd_dg00x_stream_check_external_clock() argument
94 err = snd_fw_transaction(dg00x->unit, TCODE_READ_QUADLET_REQUEST, in snd_dg00x_stream_check_external_clock()
103 int snd_dg00x_stream_get_external_rate(struct snd_dg00x *dg00x, in snd_dg00x_stream_get_external_rate() argument
110 err = snd_fw_transaction(dg00x->unit, TCODE_READ_QUADLET_REQUEST, in snd_dg00x_stream_get_external_rate()
126 static void finish_session(struct snd_dg00x *dg00x) in finish_session() argument
130 snd_fw_transaction(dg00x->unit, TCODE_WRITE_QUADLET_REQUEST, in finish_session()
135 static int begin_session(struct snd_dg00x *dg00x) in begin_session() argument
141 err = snd_fw_transaction(dg00x->unit, TCODE_READ_QUADLET_REQUEST, in begin_session()
154 err = snd_fw_transaction(dg00x->unit, in begin_session()
168 finish_session(dg00x); in begin_session()
172 static void release_resources(struct snd_dg00x *dg00x) in release_resources() argument
177 snd_fw_transaction(dg00x->unit, TCODE_WRITE_QUADLET_REQUEST, in release_resources()
182 fw_iso_resources_free(&dg00x->tx_resources); in release_resources()
183 fw_iso_resources_free(&dg00x->rx_resources); in release_resources()
186 static int keep_resources(struct snd_dg00x *dg00x, unsigned int rate) in keep_resources() argument
201 err = amdtp_dot_set_parameters(&dg00x->rx_stream, rate, in keep_resources()
205 err = fw_iso_resources_allocate(&dg00x->rx_resources, in keep_resources()
206 amdtp_stream_get_max_payload(&dg00x->rx_stream), in keep_resources()
207 fw_parent_device(dg00x->unit)->max_speed); in keep_resources()
212 err = amdtp_dot_set_parameters(&dg00x->tx_stream, rate, in keep_resources()
216 err = fw_iso_resources_allocate(&dg00x->tx_resources, in keep_resources()
217 amdtp_stream_get_max_payload(&dg00x->tx_stream), in keep_resources()
218 fw_parent_device(dg00x->unit)->max_speed); in keep_resources()
223 data = cpu_to_be32((dg00x->tx_resources.channel << 16) | in keep_resources()
224 dg00x->rx_resources.channel); in keep_resources()
225 err = snd_fw_transaction(dg00x->unit, TCODE_WRITE_QUADLET_REQUEST, in keep_resources()
233 release_resources(dg00x); in keep_resources()
237 int snd_dg00x_stream_init_duplex(struct snd_dg00x *dg00x) in snd_dg00x_stream_init_duplex() argument
242 err = fw_iso_resources_init(&dg00x->rx_resources, dg00x->unit); in snd_dg00x_stream_init_duplex()
245 err = amdtp_dot_init(&dg00x->rx_stream, dg00x->unit, AMDTP_OUT_STREAM); in snd_dg00x_stream_init_duplex()
250 err = fw_iso_resources_init(&dg00x->tx_resources, dg00x->unit); in snd_dg00x_stream_init_duplex()
253 err = amdtp_dot_init(&dg00x->tx_stream, dg00x->unit, AMDTP_IN_STREAM); in snd_dg00x_stream_init_duplex()
259 snd_dg00x_stream_destroy_duplex(dg00x); in snd_dg00x_stream_init_duplex()
267 void snd_dg00x_stream_destroy_duplex(struct snd_dg00x *dg00x) in snd_dg00x_stream_destroy_duplex() argument
269 amdtp_stream_destroy(&dg00x->rx_stream); in snd_dg00x_stream_destroy_duplex()
270 fw_iso_resources_destroy(&dg00x->rx_resources); in snd_dg00x_stream_destroy_duplex()
272 amdtp_stream_destroy(&dg00x->tx_stream); in snd_dg00x_stream_destroy_duplex()
273 fw_iso_resources_destroy(&dg00x->tx_resources); in snd_dg00x_stream_destroy_duplex()
276 int snd_dg00x_stream_start_duplex(struct snd_dg00x *dg00x, unsigned int rate) in snd_dg00x_stream_start_duplex() argument
281 if (dg00x->substreams_counter == 0) in snd_dg00x_stream_start_duplex()
285 err = snd_dg00x_stream_get_local_rate(dg00x, &curr_rate); in snd_dg00x_stream_start_duplex()
291 amdtp_streaming_error(&dg00x->tx_stream) || in snd_dg00x_stream_start_duplex()
292 amdtp_streaming_error(&dg00x->rx_stream)) { in snd_dg00x_stream_start_duplex()
293 finish_session(dg00x); in snd_dg00x_stream_start_duplex()
295 amdtp_stream_stop(&dg00x->tx_stream); in snd_dg00x_stream_start_duplex()
296 amdtp_stream_stop(&dg00x->rx_stream); in snd_dg00x_stream_start_duplex()
297 release_resources(dg00x); in snd_dg00x_stream_start_duplex()
304 if (!amdtp_stream_running(&dg00x->rx_stream)) { in snd_dg00x_stream_start_duplex()
305 err = snd_dg00x_stream_set_local_rate(dg00x, rate); in snd_dg00x_stream_start_duplex()
309 err = keep_resources(dg00x, rate); in snd_dg00x_stream_start_duplex()
313 err = begin_session(dg00x); in snd_dg00x_stream_start_duplex()
317 err = amdtp_stream_start(&dg00x->rx_stream, in snd_dg00x_stream_start_duplex()
318 dg00x->rx_resources.channel, in snd_dg00x_stream_start_duplex()
319 fw_parent_device(dg00x->unit)->max_speed); in snd_dg00x_stream_start_duplex()
323 if (!amdtp_stream_wait_callback(&dg00x->rx_stream, in snd_dg00x_stream_start_duplex()
334 if (!amdtp_stream_running(&dg00x->tx_stream)) { in snd_dg00x_stream_start_duplex()
335 err = amdtp_stream_start(&dg00x->tx_stream, in snd_dg00x_stream_start_duplex()
336 dg00x->tx_resources.channel, in snd_dg00x_stream_start_duplex()
337 fw_parent_device(dg00x->unit)->max_speed); in snd_dg00x_stream_start_duplex()
341 if (!amdtp_stream_wait_callback(&dg00x->tx_stream, in snd_dg00x_stream_start_duplex()
350 finish_session(dg00x); in snd_dg00x_stream_start_duplex()
352 amdtp_stream_stop(&dg00x->tx_stream); in snd_dg00x_stream_start_duplex()
353 amdtp_stream_stop(&dg00x->rx_stream); in snd_dg00x_stream_start_duplex()
354 release_resources(dg00x); in snd_dg00x_stream_start_duplex()
359 void snd_dg00x_stream_stop_duplex(struct snd_dg00x *dg00x) in snd_dg00x_stream_stop_duplex() argument
361 if (dg00x->substreams_counter > 0) in snd_dg00x_stream_stop_duplex()
364 amdtp_stream_stop(&dg00x->tx_stream); in snd_dg00x_stream_stop_duplex()
365 amdtp_stream_stop(&dg00x->rx_stream); in snd_dg00x_stream_stop_duplex()
366 finish_session(dg00x); in snd_dg00x_stream_stop_duplex()
367 release_resources(dg00x); in snd_dg00x_stream_stop_duplex()
376 void snd_dg00x_stream_update_duplex(struct snd_dg00x *dg00x) in snd_dg00x_stream_update_duplex() argument
378 fw_iso_resources_update(&dg00x->tx_resources); in snd_dg00x_stream_update_duplex()
379 fw_iso_resources_update(&dg00x->rx_resources); in snd_dg00x_stream_update_duplex()
381 amdtp_stream_update(&dg00x->tx_stream); in snd_dg00x_stream_update_duplex()
382 amdtp_stream_update(&dg00x->rx_stream); in snd_dg00x_stream_update_duplex()
385 void snd_dg00x_stream_lock_changed(struct snd_dg00x *dg00x) in snd_dg00x_stream_lock_changed() argument
387 dg00x->dev_lock_changed = true; in snd_dg00x_stream_lock_changed()
388 wake_up(&dg00x->hwdep_wait); in snd_dg00x_stream_lock_changed()
391 int snd_dg00x_stream_lock_try(struct snd_dg00x *dg00x) in snd_dg00x_stream_lock_try() argument
395 spin_lock_irq(&dg00x->lock); in snd_dg00x_stream_lock_try()
398 if (dg00x->dev_lock_count < 0) { in snd_dg00x_stream_lock_try()
404 if (dg00x->dev_lock_count++ == 0) in snd_dg00x_stream_lock_try()
405 snd_dg00x_stream_lock_changed(dg00x); in snd_dg00x_stream_lock_try()
408 spin_unlock_irq(&dg00x->lock); in snd_dg00x_stream_lock_try()
412 void snd_dg00x_stream_lock_release(struct snd_dg00x *dg00x) in snd_dg00x_stream_lock_release() argument
414 spin_lock_irq(&dg00x->lock); in snd_dg00x_stream_lock_release()
416 if (WARN_ON(dg00x->dev_lock_count <= 0)) in snd_dg00x_stream_lock_release()
418 if (--dg00x->dev_lock_count == 0) in snd_dg00x_stream_lock_release()
419 snd_dg00x_stream_lock_changed(dg00x); in snd_dg00x_stream_lock_release()
421 spin_unlock_irq(&dg00x->lock); in snd_dg00x_stream_lock_release()