diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-03-18 07:39:08 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-03-18 07:39:08 +0100 |
commit | d351cf4603edb2a5bfa9a48d06c425511c63f2a3 (patch) | |
tree | b03ea3cfd3ca3974237563cf87328386c3d49ff1 /sound/usb/midi.c | |
parent | 433e8327caf9f7c0432b2f2f6684a5b79cfe18e9 (diff) | |
parent | 4a122c10fbfe9020df469f0f669da129c5757671 (diff) |
Merge branch 'topic/misc' into for-linus
Diffstat (limited to 'sound/usb/midi.c')
-rw-r--r-- | sound/usb/midi.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sound/usb/midi.c b/sound/usb/midi.c index db2dc5ffe6dd..b4b39c0b6c9e 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -54,6 +54,7 @@ #include <sound/asequencer.h> #include "usbaudio.h" #include "midi.h" +#include "power.h" #include "helper.h" /* @@ -1044,6 +1045,7 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) struct snd_usb_midi* umidi = substream->rmidi->private_data; struct usbmidi_out_port* port = NULL; int i, j; + int err; for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) if (umidi->endpoints[i].out) @@ -1056,6 +1058,9 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) snd_BUG(); return -ENXIO; } + err = usb_autopm_get_interface(umidi->iface); + if (err < 0) + return -EIO; substream->runtime->private_data = port; port->state = STATE_UNKNOWN; substream_open(substream, 1); @@ -1064,7 +1069,10 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) static int snd_usbmidi_output_close(struct snd_rawmidi_substream *substream) { + struct snd_usb_midi* umidi = substream->rmidi->private_data; + substream_open(substream, 0); + usb_autopm_put_interface(umidi->iface); return 0; } |