void snd_bebob_stream_destroy(struct snd_bebob *bebob, struct amdtp_stream *stream) { snd_bebob_stream_stop(bebob, stream); if (stream == &bebob->tx_stream) cmp_connection_destroy(&bebob->out_conn); else cmp_connection_destroy(&bebob->in_conn); return; }
static void destroy_stream(struct snd_efw *efw, struct amdtp_stream *stream) { stop_stream(efw, stream); amdtp_stream_destroy(stream); if (stream == &efw->tx_stream) cmp_connection_destroy(&efw->out_conn); else cmp_connection_destroy(&efw->in_conn); }
static int init_stream(struct snd_efw *efw, struct amdtp_stream *stream) { struct cmp_connection *conn; enum cmp_direction c_dir; enum amdtp_stream_direction s_dir; int err; if (stream == &efw->tx_stream) { conn = &efw->out_conn; c_dir = CMP_OUTPUT; s_dir = AMDTP_IN_STREAM; } else { conn = &efw->in_conn; c_dir = CMP_INPUT; s_dir = AMDTP_OUT_STREAM; } err = cmp_connection_init(conn, efw->unit, c_dir, 0); if (err < 0) goto end; err = amdtp_stream_init(stream, efw->unit, s_dir, CIP_BLOCKING); if (err < 0) { amdtp_stream_destroy(stream); cmp_connection_destroy(conn); } end: return err; }
int snd_bebob_stream_init(struct snd_bebob *bebob, struct amdtp_stream *stream) { struct cmp_connection *conn; enum cmp_direction c_dir; enum amdtp_stream_direction s_dir; int err; if (stream == &bebob->tx_stream) { conn= &bebob->out_conn; c_dir = CMP_OUTPUT; s_dir = AMDTP_IN_STREAM; } else { conn= &bebob->in_conn; c_dir = CMP_INPUT; s_dir = AMDTP_OUT_STREAM; } err = cmp_connection_init(conn, bebob->unit, c_dir, 0); if (err < 0) goto end; err = amdtp_stream_init(stream, bebob->unit, s_dir, CIP_NONBLOCKING); if (err < 0) { cmp_connection_destroy(conn); goto end; } end: return err; }
void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw) { stop_stream(oxfw); amdtp_stream_destroy(&oxfw->rx_stream); cmp_connection_destroy(&oxfw->in_conn); }
/* * This function should be called before starting the stream or after stopping * the streams. */ void snd_oxfw_stream_destroy_simplex(struct snd_oxfw *oxfw, struct amdtp_stream *stream) { struct cmp_connection *conn; if (stream == &oxfw->tx_stream) conn = &oxfw->out_conn; else conn = &oxfw->in_conn; amdtp_stream_destroy(stream); cmp_connection_destroy(conn); }
static int init_both_connections(struct snd_bebob *bebob) { int err; err = cmp_connection_init(&bebob->in_conn, bebob->unit, CMP_INPUT, 0); if (err < 0) goto end; err = cmp_connection_init(&bebob->out_conn, bebob->unit, CMP_OUTPUT, 0); if (err < 0) cmp_connection_destroy(&bebob->in_conn); end: return err; }
int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw) { int err; err = cmp_connection_init(&oxfw->in_conn, oxfw->unit, CMP_INPUT, 0); if (err < 0) goto end; err = amdtp_stream_init(&oxfw->rx_stream, oxfw->unit, AMDTP_OUT_STREAM, CIP_NONBLOCKING); if (err < 0) { amdtp_stream_destroy(&oxfw->rx_stream); cmp_connection_destroy(&oxfw->in_conn); } end: return err; }
int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw, struct amdtp_stream *stream) { struct cmp_connection *conn; enum cmp_direction c_dir; enum amdtp_stream_direction s_dir; int err; if (stream == &oxfw->tx_stream) { conn = &oxfw->out_conn; c_dir = CMP_OUTPUT; s_dir = AMDTP_IN_STREAM; } else { conn = &oxfw->in_conn; c_dir = CMP_INPUT; s_dir = AMDTP_OUT_STREAM; } err = cmp_connection_init(conn, oxfw->unit, c_dir, 0); if (err < 0) goto end; err = amdtp_am824_init(stream, oxfw->unit, s_dir, CIP_NONBLOCKING); if (err < 0) { amdtp_stream_destroy(stream); cmp_connection_destroy(conn); goto end; } /* * OXFW starts to transmit packets with non-zero dbc. * OXFW postpone transferring packets till handling any asynchronous * packets. As a result, next isochronous packet includes more data * blocks than IEC 61883-6 defines. */ if (stream == &oxfw->tx_stream) { oxfw->tx_stream.flags |= CIP_JUMBO_PAYLOAD; if (oxfw->wrong_dbs) oxfw->tx_stream.flags |= CIP_WRONG_DBS; } end: return err; }
static void destroy_both_connections(struct snd_bebob *bebob) { cmp_connection_destroy(&bebob->in_conn); cmp_connection_destroy(&bebob->out_conn); }