aboutsummaryrefslogtreecommitdiffstats
path: root/sound/firewire/bebob/bebob.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/firewire/bebob/bebob.c')
-rw-r--r--sound/firewire/bebob/bebob.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
index b612599fb543..611b7dae7ee5 100644
--- a/sound/firewire/bebob/bebob.c
+++ b/sound/firewire/bebob/bebob.c
@@ -127,8 +127,11 @@ bebob_card_free(struct snd_card *card)
127{ 127{
128 struct snd_bebob *bebob = card->private_data; 128 struct snd_bebob *bebob = card->private_data;
129 129
130 snd_bebob_stream_destroy_duplex(bebob);
130 fw_unit_put(bebob->unit); 131 fw_unit_put(bebob->unit);
131 132
133 kfree(bebob->maudio_special_quirk);
134
132 if (bebob->card_index >= 0) { 135 if (bebob->card_index >= 0) {
133 mutex_lock(&devices_mutex); 136 mutex_lock(&devices_mutex);
134 clear_bit(bebob->card_index, devices_used); 137 clear_bit(bebob->card_index, devices_used);
@@ -314,10 +317,9 @@ static void bebob_remove(struct fw_unit *unit)
314 if (bebob == NULL) 317 if (bebob == NULL)
315 return; 318 return;
316 319
317 kfree(bebob->maudio_special_quirk); 320 /* Awake bus-reset waiters. */
318 321 if (!completion_done(&bebob->bus_reset))
319 snd_bebob_stream_destroy_duplex(bebob); 322 complete_all(&bebob->bus_reset);
320 snd_card_disconnect(bebob->card);
321 323
322 /* No need to wait for releasing card object in this context. */ 324 /* No need to wait for releasing card object in this context. */
323 snd_card_free_when_closed(bebob->card); 325 snd_card_free_when_closed(bebob->card);