diff options
| -rw-r--r-- | sound/core/rawmidi.c | 2 | ||||
| -rw-r--r-- | sound/core/seq/oss/seq_oss_midi.c | 14 | ||||
| -rw-r--r-- | sound/core/seq/seq_midi.c | 7 |
3 files changed, 12 insertions, 11 deletions
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c index 473247c8e6d3..c0adc14c91f0 100644 --- a/sound/core/rawmidi.c +++ b/sound/core/rawmidi.c | |||
| @@ -274,7 +274,7 @@ static int open_substream(struct snd_rawmidi *rmidi, | |||
| 274 | return err; | 274 | return err; |
| 275 | substream->opened = 1; | 275 | substream->opened = 1; |
| 276 | if (substream->use_count++ == 0) | 276 | if (substream->use_count++ == 0) |
| 277 | substream->active_sensing = 1; | 277 | substream->active_sensing = 0; |
| 278 | if (mode & SNDRV_RAWMIDI_LFLG_APPEND) | 278 | if (mode & SNDRV_RAWMIDI_LFLG_APPEND) |
| 279 | substream->append = 1; | 279 | substream->append = 1; |
| 280 | rmidi->streams[substream->stream].substream_opened++; | 280 | rmidi->streams[substream->stream].substream_opened++; |
diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c index 0a711d2d04f0..9dfb2f77be60 100644 --- a/sound/core/seq/oss/seq_oss_midi.c +++ b/sound/core/seq/oss/seq_oss_midi.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | #include <sound/asoundef.h> | ||
| 23 | #include "seq_oss_midi.h" | 24 | #include "seq_oss_midi.h" |
| 24 | #include "seq_oss_readq.h" | 25 | #include "seq_oss_readq.h" |
| 25 | #include "seq_oss_timer.h" | 26 | #include "seq_oss_timer.h" |
| @@ -476,19 +477,20 @@ snd_seq_oss_midi_reset(struct seq_oss_devinfo *dp, int dev) | |||
| 476 | ev.source.port = dp->port; | 477 | ev.source.port = dp->port; |
| 477 | if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_SYNTH) { | 478 | if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_SYNTH) { |
| 478 | ev.type = SNDRV_SEQ_EVENT_SENSING; | 479 | ev.type = SNDRV_SEQ_EVENT_SENSING; |
| 479 | snd_seq_oss_dispatch(dp, &ev, 0, 0); /* active sensing */ | 480 | snd_seq_oss_dispatch(dp, &ev, 0, 0); |
| 480 | } | 481 | } |
| 481 | for (c = 0; c < 16; c++) { | 482 | for (c = 0; c < 16; c++) { |
| 482 | ev.type = SNDRV_SEQ_EVENT_CONTROLLER; | 483 | ev.type = SNDRV_SEQ_EVENT_CONTROLLER; |
| 483 | ev.data.control.channel = c; | 484 | ev.data.control.channel = c; |
| 484 | ev.data.control.param = 123; | 485 | ev.data.control.param = MIDI_CTL_ALL_NOTES_OFF; |
| 485 | snd_seq_oss_dispatch(dp, &ev, 0, 0); /* all notes off */ | 486 | snd_seq_oss_dispatch(dp, &ev, 0, 0); |
| 486 | if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_MUSIC) { | 487 | if (dp->seq_mode == SNDRV_SEQ_OSS_MODE_MUSIC) { |
| 487 | ev.data.control.param = 121; | 488 | ev.data.control.param = |
| 488 | snd_seq_oss_dispatch(dp, &ev, 0, 0); /* reset all controllers */ | 489 | MIDI_CTL_RESET_CONTROLLERS; |
| 490 | snd_seq_oss_dispatch(dp, &ev, 0, 0); | ||
| 489 | ev.type = SNDRV_SEQ_EVENT_PITCHBEND; | 491 | ev.type = SNDRV_SEQ_EVENT_PITCHBEND; |
| 490 | ev.data.control.value = 0; | 492 | ev.data.control.value = 0; |
| 491 | snd_seq_oss_dispatch(dp, &ev, 0, 0); /* bender off */ | 493 | snd_seq_oss_dispatch(dp, &ev, 0, 0); |
| 492 | } | 494 | } |
| 493 | } | 495 | } |
| 494 | } | 496 | } |
diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c index 4d26146a62cc..ebaf1b541dcd 100644 --- a/sound/core/seq/seq_midi.c +++ b/sound/core/seq/seq_midi.c | |||
| @@ -120,7 +120,8 @@ static int dump_midi(struct snd_rawmidi_substream *substream, const char *buf, i | |||
| 120 | return -EINVAL; | 120 | return -EINVAL; |
| 121 | runtime = substream->runtime; | 121 | runtime = substream->runtime; |
| 122 | if ((tmp = runtime->avail) < count) { | 122 | if ((tmp = runtime->avail) < count) { |
| 123 | snd_printd("warning, output event was lost (count = %i, available = %i)\n", count, tmp); | 123 | if (printk_ratelimit()) |
| 124 | snd_printk(KERN_ERR "MIDI output buffer overrun\n"); | ||
| 124 | return -ENOMEM; | 125 | return -ENOMEM; |
| 125 | } | 126 | } |
| 126 | if (snd_rawmidi_kernel_write(substream, buf, count) < count) | 127 | if (snd_rawmidi_kernel_write(substream, buf, count) < count) |
| @@ -236,6 +237,7 @@ static int midisynth_use(void *private_data, struct snd_seq_port_subscribe *info | |||
| 236 | memset(¶ms, 0, sizeof(params)); | 237 | memset(¶ms, 0, sizeof(params)); |
| 237 | params.avail_min = 1; | 238 | params.avail_min = 1; |
| 238 | params.buffer_size = output_buffer_size; | 239 | params.buffer_size = output_buffer_size; |
| 240 | params.no_active_sensing = 1; | ||
| 239 | if ((err = snd_rawmidi_output_params(msynth->output_rfile.output, ¶ms)) < 0) { | 241 | if ((err = snd_rawmidi_output_params(msynth->output_rfile.output, ¶ms)) < 0) { |
| 240 | snd_rawmidi_kernel_release(&msynth->output_rfile); | 242 | snd_rawmidi_kernel_release(&msynth->output_rfile); |
| 241 | return err; | 243 | return err; |
| @@ -248,12 +250,9 @@ static int midisynth_use(void *private_data, struct snd_seq_port_subscribe *info | |||
| 248 | static int midisynth_unuse(void *private_data, struct snd_seq_port_subscribe *info) | 250 | static int midisynth_unuse(void *private_data, struct snd_seq_port_subscribe *info) |
| 249 | { | 251 | { |
| 250 | struct seq_midisynth *msynth = private_data; | 252 | struct seq_midisynth *msynth = private_data; |
| 251 | unsigned char buf = 0xff; /* MIDI reset */ | ||
| 252 | 253 | ||
| 253 | if (snd_BUG_ON(!msynth->output_rfile.output)) | 254 | if (snd_BUG_ON(!msynth->output_rfile.output)) |
| 254 | return -EINVAL; | 255 | return -EINVAL; |
| 255 | /* sending single MIDI reset message to shut the device up */ | ||
| 256 | snd_rawmidi_kernel_write(msynth->output_rfile.output, &buf, 1); | ||
| 257 | snd_rawmidi_drain_output(msynth->output_rfile.output); | 256 | snd_rawmidi_drain_output(msynth->output_rfile.output); |
| 258 | return snd_rawmidi_kernel_release(&msynth->output_rfile); | 257 | return snd_rawmidi_kernel_release(&msynth->output_rfile); |
| 259 | } | 258 | } |
