]> err.no Git - linux-2.6/blobdiff - sound/pci/echoaudio/midi.c
Merge branch 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6
[linux-2.6] / sound / pci / echoaudio / midi.c
index 5919b5c879a4ea07b82421504bd4893219e8fd38..91f5bff66d3f923fa870184bfc3705be62b1f7a9 100644 (file)
@@ -44,7 +44,7 @@ static int enable_midi_input(struct echoaudio *chip, char enable)
        if (enable) {
                chip->mtc_state = MIDI_IN_STATE_NORMAL;
                chip->comm_page->flags |=
-                       _constant_cpu_to_le32(DSP_FLAG_MIDI_INPUT);
+                       __constant_cpu_to_le32(DSP_FLAG_MIDI_INPUT);
        } else
                chip->comm_page->flags &=
                        ~__constant_cpu_to_le32(DSP_FLAG_MIDI_INPUT);
@@ -213,7 +213,7 @@ static void snd_echo_midi_output_write(unsigned long data)
        sent = bytes = 0;
        spin_lock_irqsave(&chip->lock, flags);
        chip->midi_full = 0;
-       if (chip->midi_out && !snd_rawmidi_transmit_empty(chip->midi_out)) {
+       if (!snd_rawmidi_transmit_empty(chip->midi_out)) {
                bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf,
                                                  MIDI_OUT_BUFFER_SIZE - 1);
                DE_MID(("Try to send %d bytes...\n", bytes));
@@ -264,9 +264,11 @@ static void snd_echo_midi_output_trigger(struct snd_rawmidi_substream *substream
                }
        } else {
                if (chip->tinuse) {
-                       del_timer(&chip->timer);
                        chip->tinuse = 0;
+                       spin_unlock_irq(&chip->lock);
+                       del_timer_sync(&chip->timer);
                        DE_MID(("Timer removed\n"));
+                       return;
                }
        }
        spin_unlock_irq(&chip->lock);