summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/core/timer.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c
index 00618703c58f..2d6e3e76ddf5 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -294,8 +294,21 @@ int snd_timer_open(struct snd_timer_instance **ti,
294 get_device(&timer->card->card_dev); 294 get_device(&timer->card->card_dev);
295 timeri->slave_class = tid->dev_sclass; 295 timeri->slave_class = tid->dev_sclass;
296 timeri->slave_id = slave_id; 296 timeri->slave_id = slave_id;
297 if (list_empty(&timer->open_list_head) && timer->hw.open) 297
298 timer->hw.open(timer); 298 if (list_empty(&timer->open_list_head) && timer->hw.open) {
299 int err = timer->hw.open(timer);
300 if (err) {
301 kfree(timeri->owner);
302 kfree(timeri);
303
304 if (timer->card)
305 put_device(&timer->card->card_dev);
306 module_put(timer->module);
307 mutex_unlock(&register_mutex);
308 return err;
309 }
310 }
311
299 list_add_tail(&timeri->open_list, &timer->open_list_head); 312 list_add_tail(&timeri->open_list, &timer->open_list_head);
300 snd_timer_check_master(timeri); 313 snd_timer_check_master(timeri);
301 mutex_unlock(&register_mutex); 314 mutex_unlock(&register_mutex);