[PATCH 8/9] ALSA: oxfw: optimize MIDI operations to model-specific framework

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In scs1x module, MIDI substream caches are released at .remove callback of
unit driver on IEEE 1394 bus, while oxfw model-specific framework allows
it in ALSA card free callback. MIDI close operations should be changed.

This commit applies a small optimization for MIDI operations.

Signed-off-by: Takashi Sakamoto <o-takashi@xxxxxxxxxxxxx>
---
 sound/firewire/oxfw/oxfw-scs1x.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/sound/firewire/oxfw/oxfw-scs1x.c b/sound/firewire/oxfw/oxfw-scs1x.c
index 89ba8f6..47d346c 100644
--- a/sound/firewire/oxfw/oxfw-scs1x.c
+++ b/sound/firewire/oxfw/oxfw-scs1x.c
@@ -303,11 +303,20 @@ static int midi_playback_open(struct snd_rawmidi_substream *stream)
 	scs->output_bytes = 1;
 	scs->output_escaped = false;
 
+	ACCESS_ONCE(scs->output) = stream;
+
 	return 0;
 }
 
 static int midi_playback_close(struct snd_rawmidi_substream *stream)
 {
+	struct fw_scs1x *scs = stream->rmidi->private_data;
+
+	ACCESS_ONCE(scs->output) = NULL;
+
+	wait_event(scs->idle_wait, scs->output_idle);
+	tasklet_kill(&scs->tasklet);
+
 	return 0;
 }
 
@@ -315,7 +324,6 @@ static void midi_playback_trigger(struct snd_rawmidi_substream *stream, int up)
 {
 	struct fw_scs1x *scs = stream->rmidi->private_data;
 
-	ACCESS_ONCE(scs->output) = up ? stream : NULL;
 	if (up) {
 		scs->output_idle = false;
 		tasklet_schedule(&scs->tasklet);
@@ -394,13 +402,6 @@ static void scs1x_remove(struct snd_oxfw *oxfw)
 {
 	struct fw_scs1x *scs = oxfw->spec->private_data;
 
-	ACCESS_ONCE(scs->output) = NULL;
-	ACCESS_ONCE(scs->input) = NULL;
-
-	wait_event(scs->idle_wait, scs->output_idle);
-
-	tasklet_kill(&scs->tasklet);
-
 	fw_core_remove_address_handler(&scs->hss_handler);
 }
 
-- 
2.5.0

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux