diff options
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r-- | sound/usb/usbaudio.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index e4b91045ca16..eeb09bb8cbf3 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -3091,6 +3091,7 @@ static int snd_usb_audio_create(struct usb_device *dev, int idx, | |||
3091 | chip->card = card; | 3091 | chip->card = card; |
3092 | INIT_LIST_HEAD(&chip->pcm_list); | 3092 | INIT_LIST_HEAD(&chip->pcm_list); |
3093 | INIT_LIST_HEAD(&chip->midi_list); | 3093 | INIT_LIST_HEAD(&chip->midi_list); |
3094 | INIT_LIST_HEAD(&chip->mixer_list); | ||
3094 | 3095 | ||
3095 | if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { | 3096 | if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { |
3096 | snd_usb_audio_free(chip); | 3097 | snd_usb_audio_free(chip); |
@@ -3290,6 +3291,10 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr) | |||
3290 | list_for_each(p, &chip->midi_list) { | 3291 | list_for_each(p, &chip->midi_list) { |
3291 | snd_usbmidi_disconnect(p); | 3292 | snd_usbmidi_disconnect(p); |
3292 | } | 3293 | } |
3294 | /* release mixer resources */ | ||
3295 | list_for_each(p, &chip->mixer_list) { | ||
3296 | snd_usb_mixer_disconnect(p); | ||
3297 | } | ||
3293 | usb_chip[chip->index] = NULL; | 3298 | usb_chip[chip->index] = NULL; |
3294 | up(®ister_mutex); | 3299 | up(®ister_mutex); |
3295 | snd_card_free(card); | 3300 | snd_card_free(card); |