]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/media/video/saa7134/saa7134-alsa.c
V4L/DVB (3200): Fix saa7134 ALSA/OSS collisions
[karo-tx-linux.git] / drivers / media / video / saa7134 / saa7134-alsa.c
index 6752dd1c1e8a48c4401fc2aa511657603fb78f77..ade05f75fdb05d2c23165c42091913ca56f67859 100644 (file)
@@ -989,6 +989,14 @@ static int saa7134_alsa_init(void)
        struct saa7134_dev *dev = NULL;
        struct list_head *list;
 
+       if (!dmasound_init && !dmasound_exit) {
+               dmasound_init = alsa_device_init;
+               dmasound_exit = alsa_device_exit;
+       } else {
+               printk(KERN_WARNING "saa7134 ALSA: can't load, DMA sound handler already assigned (probably to OSS)\n");
+               return -EBUSY;
+       }
+
        printk(KERN_INFO "saa7134 ALSA driver for DMA sound loaded\n");
 
        list_for_each(list,&saa7134_devlist) {
@@ -1001,9 +1009,6 @@ static int saa7134_alsa_init(void)
                }
        }
 
-       dmasound_init = alsa_device_init;
-       dmasound_exit = alsa_device_exit;
-
        if (dev == NULL)
                printk(KERN_INFO "saa7134 ALSA: no saa7134 cards found\n");
 
@@ -1023,6 +1028,8 @@ static void saa7134_alsa_exit(void)
                snd_card_free(snd_saa7134_cards[idx]);
        }
 
+       dmasound_init = NULL;
+       dmasound_exit = NULL;
        printk(KERN_INFO "saa7134 ALSA driver for DMA sound unloaded\n");
 
        return;