diff options
author | Takashi Sakamoto <o-takashi@sakamocchi.jp> | 2014-12-08 16:10:49 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2014-12-10 10:50:00 +0100 |
commit | 8985f4ac1c42bd25799f294f4e87fa73064673c7 (patch) | |
tree | 04f57545162b29abfc8a6b0c2d2833721b4bcc78 /sound/firewire/oxfw/oxfw-midi.c | |
parent | ALSA: oxfw: Add support for capture/playback MIDI messages (diff) | |
download | linux-8985f4ac1c42bd25799f294f4e87fa73064673c7.tar.xz linux-8985f4ac1c42bd25799f294f4e87fa73064673c7.zip |
ALSA: oxfw: Add hwdep interface
This interface is designed for mixer/control application. By using this
interface, an application can get information about firewire node, can
lock/unlock kernel streaming and can get notification at starting/stopping
kernel streaming.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Acked-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/oxfw/oxfw-midi.c')
-rw-r--r-- | sound/firewire/oxfw/oxfw-midi.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sound/firewire/oxfw/oxfw-midi.c b/sound/firewire/oxfw/oxfw-midi.c index 334b11d1a422..540a30338516 100644 --- a/sound/firewire/oxfw/oxfw-midi.c +++ b/sound/firewire/oxfw/oxfw-midi.c @@ -13,6 +13,10 @@ static int midi_capture_open(struct snd_rawmidi_substream *substream) struct snd_oxfw *oxfw = substream->rmidi->private_data; int err; + err = snd_oxfw_stream_lock_try(oxfw); + if (err < 0) + return err; + mutex_lock(&oxfw->mutex); oxfw->capture_substreams++; @@ -20,6 +24,9 @@ static int midi_capture_open(struct snd_rawmidi_substream *substream) mutex_unlock(&oxfw->mutex); + if (err < 0) + snd_oxfw_stream_lock_release(oxfw); + return err; } @@ -28,6 +35,10 @@ static int midi_playback_open(struct snd_rawmidi_substream *substream) struct snd_oxfw *oxfw = substream->rmidi->private_data; int err; + err = snd_oxfw_stream_lock_try(oxfw); + if (err < 0) + return err; + mutex_lock(&oxfw->mutex); oxfw->playback_substreams++; @@ -35,6 +46,9 @@ static int midi_playback_open(struct snd_rawmidi_substream *substream) mutex_unlock(&oxfw->mutex); + if (err < 0) + snd_oxfw_stream_lock_release(oxfw); + return err; } @@ -49,6 +63,7 @@ static int midi_capture_close(struct snd_rawmidi_substream *substream) mutex_unlock(&oxfw->mutex); + snd_oxfw_stream_lock_release(oxfw); return 0; } @@ -63,6 +78,7 @@ static int midi_playback_close(struct snd_rawmidi_substream *substream) mutex_unlock(&oxfw->mutex); + snd_oxfw_stream_lock_release(oxfw); return 0; } |