ALSA: timer: Handle the device directly
authorTakashi Iwai <tiwai@suse.de>
Thu, 29 Jan 2015 17:12:26 +0000 (18:12 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Feb 2015 13:42:44 +0000 (14:42 +0100)
This is a relatively straightforward change, using the struct device
directly for managing the ALSA timer device.

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/timer.c

index 28b673d4f8124be43d17cf2bcff278d5afdcd497..dae40ac11e04e09c6747c5d9028c00c94edad885 100644 (file)
@@ -1951,6 +1951,8 @@ static void snd_timer_free_all(void)
                snd_timer_free(timer);
 }
 
+static struct device timer_dev;
+
 /*
  *  ENTRY functions
  */
@@ -1959,6 +1961,9 @@ static int __init alsa_timer_init(void)
 {
        int err;
 
+       snd_device_initialize(&timer_dev, NULL);
+       dev_set_name(&timer_dev, "timer");
+
 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
        snd_oss_info_register(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1,
                              "system timer");
@@ -1967,14 +1972,17 @@ static int __init alsa_timer_init(void)
        err = snd_timer_register_system();
        if (err < 0) {
                pr_err("ALSA: unable to register system timer (%i)\n", err);
+               put_device(&timer_dev);
                return err;
        }
 
-       err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0,
-                                 &snd_timer_f_ops, NULL, "timer");
+       err = snd_register_device_for_dev(SNDRV_DEVICE_TYPE_TIMER, NULL, 0,
+                                         &snd_timer_f_ops, NULL,
+                                         &timer_dev, NULL, NULL);
        if (err < 0) {
                pr_err("ALSA: unable to register timer device (%i)\n", err);
                snd_timer_free_all();
+               put_device(&timer_dev);
                return err;
        }
 
@@ -1986,6 +1994,7 @@ static void __exit alsa_timer_exit(void)
 {
        snd_unregister_device(SNDRV_DEVICE_TYPE_TIMER, NULL, 0);
        snd_timer_free_all();
+       put_device(&timer_dev);
        snd_timer_proc_done();
 #ifdef SNDRV_OSS_INFO_DEV_TIMERS
        snd_oss_info_unregister(SNDRV_OSS_INFO_DEV_TIMERS, SNDRV_CARDS - 1);