summaryrefslogtreecommitdiffstats
path: root/sound/usb/card.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-02-28 17:47:09 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2011-02-28 17:47:09 -0800
commitc4319c7db8c3805e4811eaceeee6c2fa51411bd4 (patch)
treed47c9a0e422695fba3120af9fa3310e811bba723 /sound/usb/card.c
parentfbd71844852c9458bf73c7cbdae7189c2d4b377c (diff)
parent11be6a269d2ad3e94c0597f21786092b8340a822 (diff)
downloadop-kernel-dev-c4319c7db8c3805e4811eaceeee6c2fa51411bd4.zip
op-kernel-dev-c4319c7db8c3805e4811eaceeee6c2fa51411bd4.tar.gz
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: eukrea-tlv320: fix platform_name ASoC: correct pxa AC97 DAI names ALSA: hda - Add support for new IDT 92HD98 and 92HD99 codecs ALSA: HDA: Add ideapad quirk for two Dell machines ALSA: HDA: Add a new Conexant codec 506e (20590) ALSA: usb-audio: fix oops due to cleanup race when disconnecting ASoC: Hook wm_hubs micbiases up to CLK_SYS ASoC: Correct definition of WM8903_VMID_RES_5K ASoC: Fix WM8958 default microphone detection argument ordering ALSA: HDA: Fix mic initialization in VIA auto parser ALSA: fix one memory leak in sound jack
Diffstat (limited to 'sound/usb/card.c')
-rw-r--r--sound/usb/card.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/usb/card.c b/sound/usb/card.c
index 800f7cb..c0f8270b 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -323,6 +323,7 @@ static int snd_usb_audio_create(struct usb_device *dev, int idx,
return -ENOMEM;
}
+ mutex_init(&chip->shutdown_mutex);
chip->index = idx;
chip->dev = dev;
chip->card = card;
@@ -531,6 +532,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
chip = ptr;
card = chip->card;
mutex_lock(&register_mutex);
+ mutex_lock(&chip->shutdown_mutex);
chip->shutdown = 1;
chip->num_interfaces--;
if (chip->num_interfaces <= 0) {
@@ -548,9 +550,11 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
snd_usb_mixer_disconnect(p);
}
usb_chip[chip->index] = NULL;
+ mutex_unlock(&chip->shutdown_mutex);
mutex_unlock(&register_mutex);
snd_card_free_when_closed(card);
} else {
+ mutex_unlock(&chip->shutdown_mutex);
mutex_unlock(&register_mutex);
}
}
OpenPOWER on IntegriCloud