]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/drivers/opl3/opl3_seq.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/i2c-2.6
[mv-sheeva.git] / sound / drivers / opl3 / opl3_seq.c
index e26556d500e599efef4a075a5d923a87b79fa539..96762c9d485578799c8a8fb6dbce6bad48f17953 100644 (file)
@@ -203,12 +203,16 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
                                                      SNDRV_SEQ_PORT_CAP_SUBS_WRITE,
                                                      SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
                                                      SNDRV_SEQ_PORT_TYPE_MIDI_GM |
-                                                     SNDRV_SEQ_PORT_TYPE_SYNTH,
+                                                     SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE |
+                                                     SNDRV_SEQ_PORT_TYPE_HARDWARE |
+                                                     SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
                                                      16, voices,
                                                      name);
        if (opl3->chset->port < 0) {
+               int port;
+               port = opl3->chset->port;
                snd_midi_channel_free_set(opl3->chset);
-               return opl3->chset->port;
+               return port;
        }
        return 0;
 }
@@ -218,7 +222,7 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
 static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
 {
        struct snd_opl3 *opl3;
-       int client;
+       int client, err;
        char name[32];
        int opl_ver;
 
@@ -239,7 +243,11 @@ static int snd_opl3_seq_new_device(struct snd_seq_device *dev)
        if (client < 0)
                return client;
 
-       snd_opl3_synth_create_port(opl3);
+       if ((err = snd_opl3_synth_create_port(opl3)) < 0) {
+               snd_seq_delete_kernel_client(client);
+               opl3->seq_client = -1;
+               return err;
+       }
 
        /* initialize instrument list */
        opl3->ilist = snd_seq_instr_list_new();