Merge branch 'linus'
[sfrench/cifs-2.6.git] / sound / drivers / opl3 / opl3_oss.c
index 31f1f2e25aa076012d2b799d9619e1695f18887a..fccf019a6d85968a5ff8f26953d0f9dba655d654 100644 (file)
@@ -104,8 +104,10 @@ static int snd_opl3_oss_create_port(struct snd_opl3 * opl3)
                                                          voices, voices,
                                                          name);
        if (opl3->oss_chset->port < 0) {
+               int port;
+               port = opl3->oss_chset->port;
                snd_midi_channel_free_set(opl3->oss_chset);
-               return opl3->oss_chset->port;
+               return port;
        }
        return 0;
 }
@@ -136,17 +138,17 @@ void snd_opl3_init_seq_oss(struct snd_opl3 *opl3, char *name)
        arg->oper = oss_callback;
        arg->private_data = opl3;
 
-       snd_opl3_oss_create_port(opl3);
-
-       /* register to OSS synth table */
-       snd_device_register(opl3->card, dev);
+       if (snd_opl3_oss_create_port(opl3)) {
+               /* register to OSS synth table */
+               snd_device_register(opl3->card, dev);
+       }
 }
 
 /* unregister */
 void snd_opl3_free_seq_oss(struct snd_opl3 *opl3)
 {
        if (opl3->oss_seq_dev) {
-               snd_device_free(opl3->card, opl3->oss_seq_dev);
+               /* The instance should have been released in prior */
                opl3->oss_seq_dev = NULL;
        }
 }