aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/timer.h1
-rw-r--r--sound/core/rtctimer.c4
-rw-r--r--sound/core/timer.c7
3 files changed, 8 insertions, 4 deletions
diff --git a/include/sound/timer.h b/include/sound/timer.h
index 1898511a0f38..b55f38ae56e1 100644
--- a/include/sound/timer.h
+++ b/include/sound/timer.h
@@ -88,6 +88,7 @@ struct _snd_timer_hardware {
88struct _snd_timer { 88struct _snd_timer {
89 snd_timer_class_t tmr_class; 89 snd_timer_class_t tmr_class;
90 snd_card_t *card; 90 snd_card_t *card;
91 struct module *module;
91 int tmr_device; 92 int tmr_device;
92 int tmr_subdevice; 93 int tmr_subdevice;
93 char id[64]; 94 char id[64];
diff --git a/sound/core/rtctimer.c b/sound/core/rtctimer.c
index 8762ff8938c2..c3c18568207e 100644
--- a/sound/core/rtctimer.c
+++ b/sound/core/rtctimer.c
@@ -124,7 +124,8 @@ static int __init rtctimer_init(void)
124 124
125 if (rtctimer_freq < 2 || rtctimer_freq > 8192 || 125 if (rtctimer_freq < 2 || rtctimer_freq > 8192 ||
126 (rtctimer_freq & (rtctimer_freq - 1)) != 0) { 126 (rtctimer_freq & (rtctimer_freq - 1)) != 0) {
127 snd_printk(KERN_ERR "rtctimer: invalid frequency %d\n", rtctimer_freq); 127 snd_printk(KERN_ERR "rtctimer: invalid frequency %d\n",
128 rtctimer_freq);
128 return -EINVAL; 129 return -EINVAL;
129 } 130 }
130 131
@@ -133,6 +134,7 @@ static int __init rtctimer_init(void)
133 if (err < 0) 134 if (err < 0)
134 return err; 135 return err;
135 136
137 timer->module = THIS_MODULE;
136 strcpy(timer->name, "RTC timer"); 138 strcpy(timer->name, "RTC timer");
137 timer->hw = rtc_hw; 139 timer->hw = rtc_hw;
138 timer->hw.resolution = NANO_SEC / rtctimer_freq; 140 timer->hw.resolution = NANO_SEC / rtctimer_freq;
diff --git a/sound/core/timer.c b/sound/core/timer.c
index b02681eaea75..c8496c7b8df8 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -113,7 +113,7 @@ static snd_timer_instance_t *snd_timer_instance_new(char *owner, snd_timer_t *ti
113 INIT_LIST_HEAD(&timeri->slave_active_head); 113 INIT_LIST_HEAD(&timeri->slave_active_head);
114 114
115 timeri->timer = timer; 115 timeri->timer = timer;
116 if (timer && timer->card && !try_module_get(timer->card->module)) { 116 if (timer && !try_module_get(timer->module)) {
117 kfree(timeri->owner); 117 kfree(timeri->owner);
118 kfree(timeri); 118 kfree(timeri);
119 return NULL; 119 return NULL;
@@ -363,8 +363,8 @@ int snd_timer_close(snd_timer_instance_t * timeri)
363 timeri->private_free(timeri); 363 timeri->private_free(timeri);
364 kfree(timeri->owner); 364 kfree(timeri->owner);
365 kfree(timeri); 365 kfree(timeri);
366 if (timer && timer->card) 366 if (timer)
367 module_put(timer->card->module); 367 module_put(timer->module);
368 return 0; 368 return 0;
369} 369}
370 370
@@ -787,6 +787,7 @@ int snd_timer_new(snd_card_t *card, char *id, snd_timer_id_t *tid, snd_timer_t *
787 spin_lock_init(&timer->lock); 787 spin_lock_init(&timer->lock);
788 tasklet_init(&timer->task_queue, snd_timer_tasklet, (unsigned long)timer); 788 tasklet_init(&timer->task_queue, snd_timer_tasklet, (unsigned long)timer);
789 if (card != NULL) { 789 if (card != NULL) {
790 timer->module = card->module;
790 if ((err = snd_device_new(card, SNDRV_DEV_TIMER, timer, &ops)) < 0) { 791 if ((err = snd_device_new(card, SNDRV_DEV_TIMER, timer, &ops)) < 0) {
791 snd_timer_free(timer); 792 snd_timer_free(timer);
792 return err; 793 return err;