diff options
Diffstat (limited to 'sound/firewire/bebob/bebob.c')
-rw-r--r-- | sound/firewire/bebob/bebob.c | 10 |
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); |