ALSA: oxfw: unify substreams counter
In former commits, two isochronous contexts are handles at the same time. This commit unifies stream counters to obsolete them. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
779f0dba0b
Коммит
4a0a04729a
|
@ -19,7 +19,7 @@ static int midi_capture_open(struct snd_rawmidi_substream *substream)
|
||||||
|
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
oxfw->capture_substreams++;
|
++oxfw->substreams_count;
|
||||||
err = snd_oxfw_stream_start_duplex(oxfw, &oxfw->tx_stream, 0, 0);
|
err = snd_oxfw_stream_start_duplex(oxfw, &oxfw->tx_stream, 0, 0);
|
||||||
|
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
|
@ -41,7 +41,7 @@ static int midi_playback_open(struct snd_rawmidi_substream *substream)
|
||||||
|
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
oxfw->playback_substreams++;
|
++oxfw->substreams_count;
|
||||||
err = snd_oxfw_stream_start_duplex(oxfw, &oxfw->rx_stream, 0, 0);
|
err = snd_oxfw_stream_start_duplex(oxfw, &oxfw->rx_stream, 0, 0);
|
||||||
|
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
|
@ -58,7 +58,7 @@ static int midi_capture_close(struct snd_rawmidi_substream *substream)
|
||||||
|
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
oxfw->capture_substreams--;
|
--oxfw->substreams_count;
|
||||||
snd_oxfw_stream_stop_duplex(oxfw);
|
snd_oxfw_stream_stop_duplex(oxfw);
|
||||||
|
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
|
@ -73,7 +73,7 @@ static int midi_playback_close(struct snd_rawmidi_substream *substream)
|
||||||
|
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
oxfw->playback_substreams--;
|
--oxfw->substreams_count;
|
||||||
snd_oxfw_stream_stop_duplex(oxfw);
|
snd_oxfw_stream_stop_duplex(oxfw);
|
||||||
|
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
|
|
|
@ -220,7 +220,7 @@ static int pcm_capture_hw_params(struct snd_pcm_substream *substream,
|
||||||
|
|
||||||
if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
|
if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
oxfw->capture_substreams++;
|
++oxfw->substreams_count;
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ static int pcm_playback_hw_params(struct snd_pcm_substream *substream,
|
||||||
|
|
||||||
if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
|
if (substream->runtime->status->state == SNDRV_PCM_STATE_OPEN) {
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
oxfw->playback_substreams++;
|
++oxfw->substreams_count;
|
||||||
mutex_unlock(&oxfw->mutex);
|
mutex_unlock(&oxfw->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ static int pcm_capture_hw_free(struct snd_pcm_substream *substream)
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
|
if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
|
||||||
oxfw->capture_substreams--;
|
--oxfw->substreams_count;
|
||||||
|
|
||||||
snd_oxfw_stream_stop_duplex(oxfw);
|
snd_oxfw_stream_stop_duplex(oxfw);
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ static int pcm_playback_hw_free(struct snd_pcm_substream *substream)
|
||||||
mutex_lock(&oxfw->mutex);
|
mutex_lock(&oxfw->mutex);
|
||||||
|
|
||||||
if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
|
if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
|
||||||
oxfw->playback_substreams--;
|
--oxfw->substreams_count;
|
||||||
|
|
||||||
snd_oxfw_stream_stop_duplex(oxfw);
|
snd_oxfw_stream_stop_duplex(oxfw);
|
||||||
|
|
||||||
|
|
|
@ -244,7 +244,7 @@ int snd_oxfw_stream_start_duplex(struct snd_oxfw *oxfw,
|
||||||
enum avc_general_plug_dir dir;
|
enum avc_general_plug_dir dir;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
if (oxfw->capture_substreams == 0 && oxfw->playback_substreams == 0)
|
if (oxfw->substreams_count == 0)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
// Considering JACK/FFADO streaming:
|
// Considering JACK/FFADO streaming:
|
||||||
|
@ -323,7 +323,7 @@ error:
|
||||||
|
|
||||||
void snd_oxfw_stream_stop_duplex(struct snd_oxfw *oxfw)
|
void snd_oxfw_stream_stop_duplex(struct snd_oxfw *oxfw)
|
||||||
{
|
{
|
||||||
if (oxfw->capture_substreams == 0 && oxfw->playback_substreams == 0) {
|
if (oxfw->substreams_count == 0) {
|
||||||
amdtp_stream_stop(&oxfw->rx_stream);
|
amdtp_stream_stop(&oxfw->rx_stream);
|
||||||
cmp_connection_break(&oxfw->in_conn);
|
cmp_connection_break(&oxfw->in_conn);
|
||||||
|
|
||||||
|
|
|
@ -52,8 +52,7 @@ struct snd_oxfw {
|
||||||
struct cmp_connection in_conn;
|
struct cmp_connection in_conn;
|
||||||
struct amdtp_stream tx_stream;
|
struct amdtp_stream tx_stream;
|
||||||
struct amdtp_stream rx_stream;
|
struct amdtp_stream rx_stream;
|
||||||
unsigned int capture_substreams;
|
unsigned int substreams_count;
|
||||||
unsigned int playback_substreams;
|
|
||||||
|
|
||||||
unsigned int midi_input_ports;
|
unsigned int midi_input_ports;
|
||||||
unsigned int midi_output_ports;
|
unsigned int midi_output_ports;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче