MODULE_PARM_DESC(tuner,    "tuner type");
 MODULE_PARM_DESC(card,     "card type");
 
-static DEFINE_MUTEX(devlist_lock);
+DEFINE_MUTEX(saa7134_devlist_lock);
+EXPORT_SYMBOL(saa7134_devlist_lock);
 LIST_HEAD(saa7134_devlist);
+EXPORT_SYMBOL(saa7134_devlist);
 static LIST_HEAD(mops_list);
 static unsigned int saa7134_devcount;
 
 
        v4l2_prio_init(&dev->prio);
 
+       mutex_lock(&saa7134_devlist_lock);
+       list_for_each_entry(mops, &mops_list, next)
+               mpeg_ops_attach(mops, dev);
+       list_add_tail(&dev->devlist, &saa7134_devlist);
+       mutex_unlock(&saa7134_devlist_lock);
+
+       /* check for signal */
+       saa7134_irq_video_signalchange(dev);
+
+       if (TUNER_ABSENT != dev->tuner_type)
+               saa_call_all(dev, core, s_standby, 0);
+
        /* register v4l devices */
        if (saa7134_no_overlay > 0)
                printk(KERN_INFO "%s: Overlay support disabled.\n", dev->name);
        /* everything worked */
        saa7134_devcount++;
 
-       mutex_lock(&devlist_lock);
-       list_for_each_entry(mops, &mops_list, next)
-               mpeg_ops_attach(mops, dev);
-       list_add_tail(&dev->devlist,&saa7134_devlist);
-       mutex_unlock(&devlist_lock);
-
-       /* check for signal */
-       saa7134_irq_video_signalchange(dev);
-
-       if (saa7134_dmasound_init && !dev->dmasound.priv_data) {
+       if (saa7134_dmasound_init && !dev->dmasound.priv_data)
                saa7134_dmasound_init(dev);
-       }
-
-       if (TUNER_ABSENT != dev->tuner_type)
-               saa_call_all(dev, core, s_standby, 0);
 
        return 0;
 
        saa7134_hwfini(dev);
 
        /* unregister */
-       mutex_lock(&devlist_lock);
+       mutex_lock(&saa7134_devlist_lock);
        list_del(&dev->devlist);
        list_for_each_entry(mops, &mops_list, next)
                mpeg_ops_detach(mops, dev);
-       mutex_unlock(&devlist_lock);
+       mutex_unlock(&saa7134_devlist_lock);
        saa7134_devcount--;
 
        saa7134_i2c_unregister(dev);
 {
        struct saa7134_dev *dev;
 
-       mutex_lock(&devlist_lock);
+       mutex_lock(&saa7134_devlist_lock);
        list_for_each_entry(dev, &saa7134_devlist, devlist)
                mpeg_ops_attach(ops, dev);
        list_add_tail(&ops->next,&mops_list);
-       mutex_unlock(&devlist_lock);
+       mutex_unlock(&saa7134_devlist_lock);
        return 0;
 }
 
 {
        struct saa7134_dev *dev;
 
-       mutex_lock(&devlist_lock);
+       mutex_lock(&saa7134_devlist_lock);
        list_del(&ops->next);
        list_for_each_entry(dev, &saa7134_devlist, devlist)
                mpeg_ops_detach(ops, dev);
-       mutex_unlock(&devlist_lock);
+       mutex_unlock(&saa7134_devlist_lock);
 }
 
 EXPORT_SYMBOL(saa7134_ts_register);
 /* ----------------------------------------------------------- */
 
 EXPORT_SYMBOL(saa7134_set_gpio);
-EXPORT_SYMBOL(saa7134_devlist);
 EXPORT_SYMBOL(saa7134_boards);
 
 /* ----------------- for the DMA sound modules --------------- */
 
        enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        int radio = 0;
 
-       lock_kernel();
+       mutex_lock(&saa7134_devlist_lock);
        list_for_each_entry(dev, &saa7134_devlist, devlist) {
                if (dev->video_dev && (dev->video_dev->minor == minor))
                        goto found;
                        goto found;
                }
        }
-       unlock_kernel();
+       mutex_unlock(&saa7134_devlist_lock);
        return -ENODEV;
- found:
+
+found:
+       mutex_unlock(&saa7134_devlist_lock);
 
        dprintk("open minor=%d radio=%d type=%s\n",minor,radio,
                v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
-       if (NULL == fh) {
-               unlock_kernel();
+       if (NULL == fh)
                return -ENOMEM;
-       }
+
        file->private_data = fh;
        fh->dev      = dev;
        fh->radio    = radio;
                /* switch to video/vbi mode */
                video_mux(dev,dev->ctl_input);
        }
-       unlock_kernel();
        return 0;
 }