aboutsummaryrefslogtreecommitdiffstats
path: root/sound/core/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/core/timer.c')
-rw-r--r--sound/core/timer.c42
1 files changed, 31 insertions, 11 deletions
diff --git a/sound/core/timer.c b/sound/core/timer.c
index a44235555896..490b489d713d 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -1940,6 +1940,17 @@ static const struct file_operations snd_timer_f_ops =
1940 .fasync = snd_timer_user_fasync, 1940 .fasync = snd_timer_user_fasync,
1941}; 1941};
1942 1942
1943/* unregister the system timer */
1944static void snd_timer_free_all(void)
1945{
1946 struct snd_timer *timer, *n;
1947
1948 list_for_each_entry_safe(timer, n, &snd_timer_list, device_list)
1949 snd_timer_free(timer);
1950}
1951
1952static struct device timer_dev;
1953
1943/* 1954/*
1944 * ENTRY functions 1955 * ENTRY functions
1945 */ 1956 */
@@ -1948,30 +1959,39 @@ static int __init alsa_timer_init(void)
1948{ 1959{
1949 int err; 1960 int err;
1950 1961
1962 snd_device_initialize(&timer_dev, NULL);
1963 dev_set_name(&timer_dev, "timer");
1964
1951#ifdef SNDRV_OSS_INFO_DEV_TIMERS 1965#ifdef SNDRV_OSS_INFO_DEV_TIMERS
1952 snd_oss_info_register(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1, 1966 snd_oss_info_register(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1,
1953 "system timer"); 1967 "system timer");
1954#endif 1968#endif
1955 1969
1956 if ((err = snd_timer_register_system()) < 0) 1970 err = snd_timer_register_system();
1971 if (err < 0) {
1957 pr_err("ALSA: unable to register system timer (%i)\n", err); 1972 pr_err("ALSA: unable to register system timer (%i)\n", err);
1958 if ((err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0, 1973 put_device(&timer_dev);
1959 &snd_timer_f_ops, NULL, "timer")) < 0) 1974 return err;
1975 }
1976
1977 err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0,
1978 &snd_timer_f_ops, NULL, &timer_dev);
1979 if (err < 0) {
1960 pr_err("ALSA: unable to register timer device (%i)\n", err); 1980 pr_err("ALSA: unable to register timer device (%i)\n", err);
1981 snd_timer_free_all();
1982 put_device(&timer_dev);
1983 return err;
1984 }
1985
1961 snd_timer_proc_init(); 1986 snd_timer_proc_init();
1962 return 0; 1987 return 0;
1963} 1988}
1964 1989
1965static void __exit alsa_timer_exit(void) 1990static void __exit alsa_timer_exit(void)
1966{ 1991{
1967 struct list_head *p, *n; 1992 snd_unregister_device(&timer_dev);
1968 1993 snd_timer_free_all();
1969 snd_unregister_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0); 1994 put_device(&timer_dev);
1970 /* unregister the system timer */
1971 list_for_each_safe(p, n, &snd_timer_list) {
1972 struct snd_timer *timer = list_entry(p, struct snd_timer, device_list);
1973 snd_timer_free(timer);
1974 }
1975 snd_timer_proc_done(); 1995 snd_timer_proc_done();
1976#ifdef SNDRV_OSS_INFO_DEV_TIMERS 1996#ifdef SNDRV_OSS_INFO_DEV_TIMERS
1977 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1); 1997 snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1);