diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 2b9d940..5c53ec8 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -48,6 +48,7 @@
 #include <linux/usb.h>
 #include <sound/core.h>
 #include <sound/rawmidi.h>
+#include <sound/asequencer.h>
 #include "usbaudio.h"
 
 
@@ -1010,97 +1011,157 @@
  * "(product) MIDI (n)" schema because they aren't external MIDI ports,
  * such as internal control or synthesizer ports.
  */
-static struct {
+static struct port_info {
 	u32 id;
-	int port;
-	const char *name_format;
-} snd_usbmidi_port_names[] = {
+	short int port;
+	short int voices;
+	const char *name;
+	unsigned int seq_flags;
+} snd_usbmidi_port_info[] = {
+#define PORT_INFO(vendor, product, num, name_, voices_, flags) \
+	{ .id = USB_ID(vendor, product), \
+	  .port = num, .voices = voices_, \
+	  .name = name_, .seq_flags = flags }
+#define EXTERNAL_PORT(vendor, product, num, name) \
+	PORT_INFO(vendor, product, num, name, 0, \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
+		  SNDRV_SEQ_PORT_TYPE_HARDWARE | \
+		  SNDRV_SEQ_PORT_TYPE_PORT)
+#define CONTROL_PORT(vendor, product, num, name) \
+	PORT_INFO(vendor, product, num, name, 0, \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
+		  SNDRV_SEQ_PORT_TYPE_HARDWARE)
+#define ROLAND_SYNTH_PORT(vendor, product, num, name, voices) \
+	PORT_INFO(vendor, product, num, name, voices, \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GM | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GS | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_XG | \
+		  SNDRV_SEQ_PORT_TYPE_HARDWARE | \
+		  SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
+#define SOUNDCANVAS_PORT(vendor, product, num, name, voices) \
+	PORT_INFO(vendor, product, num, name, voices, \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GM | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GM2 | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_GS | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_XG | \
+		  SNDRV_SEQ_PORT_TYPE_MIDI_MT32 | \
+		  SNDRV_SEQ_PORT_TYPE_HARDWARE | \
+		  SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
 	/* Roland UA-100 */
-	{ USB_ID(0x0582, 0x0000), 2, "%s Control" },
+	CONTROL_PORT(0x0582, 0x0000, 2, "%s Control"),
 	/* Roland SC-8850 */
-	{ USB_ID(0x0582, 0x0003), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x0003), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x0003), 2, "%s Part C" },
-	{ USB_ID(0x0582, 0x0003), 3, "%s Part D" },
-	{ USB_ID(0x0582, 0x0003), 4, "%s MIDI 1" },
-	{ USB_ID(0x0582, 0x0003), 5, "%s MIDI 2" },
+	SOUNDCANVAS_PORT(0x0582, 0x0003, 0, "%s Part A", 128),
+	SOUNDCANVAS_PORT(0x0582, 0x0003, 1, "%s Part B", 128),
+	SOUNDCANVAS_PORT(0x0582, 0x0003, 2, "%s Part C", 128),
+	SOUNDCANVAS_PORT(0x0582, 0x0003, 3, "%s Part D", 128),
+	EXTERNAL_PORT(0x0582, 0x0003, 4, "%s MIDI 1"),
+	EXTERNAL_PORT(0x0582, 0x0003, 5, "%s MIDI 2"),
 	/* Roland U-8 */
-	{ USB_ID(0x0582, 0x0004), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x0004), 1, "%s Control" },
+	EXTERNAL_PORT(0x0582, 0x0004, 0, "%s MIDI"),
+	CONTROL_PORT(0x0582, 0x0004, 1, "%s Control"),
 	/* Roland SC-8820 */
-	{ USB_ID(0x0582, 0x0007), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x0007), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x0007), 2, "%s MIDI" },
+	SOUNDCANVAS_PORT(0x0582, 0x0007, 0, "%s Part A", 64),
+	SOUNDCANVAS_PORT(0x0582, 0x0007, 1, "%s Part B", 64),
+	EXTERNAL_PORT(0x0582, 0x0007, 2, "%s MIDI"),
 	/* Roland SK-500 */
-	{ USB_ID(0x0582, 0x000b), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x000b), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x000b), 2, "%s MIDI" },
+	SOUNDCANVAS_PORT(0x0582, 0x000b, 0, "%s Part A", 64),
+	SOUNDCANVAS_PORT(0x0582, 0x000b, 1, "%s Part B", 64),
+	EXTERNAL_PORT(0x0582, 0x000b, 2, "%s MIDI"),
 	/* Roland SC-D70 */
-	{ USB_ID(0x0582, 0x000c), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x000c), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x000c), 2, "%s MIDI" },
+	SOUNDCANVAS_PORT(0x0582, 0x000c, 0, "%s Part A", 64),
+	SOUNDCANVAS_PORT(0x0582, 0x000c, 1, "%s Part B", 64),
+	EXTERNAL_PORT(0x0582, 0x000c, 2, "%s MIDI"),
 	/* Edirol UM-880 */
-	{ USB_ID(0x0582, 0x0014), 8, "%s Control" },
+	CONTROL_PORT(0x0582, 0x0014, 8, "%s Control"),
 	/* Edirol SD-90 */
-	{ USB_ID(0x0582, 0x0016), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x0016), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x0016), 2, "%s MIDI 1" },
-	{ USB_ID(0x0582, 0x0016), 3, "%s MIDI 2" },
+	ROLAND_SYNTH_PORT(0x0582, 0x0016, 0, "%s Part A", 128),
+	ROLAND_SYNTH_PORT(0x0582, 0x0016, 1, "%s Part B", 128),
+	EXTERNAL_PORT(0x0582, 0x0016, 2, "%s MIDI 1"),
+	EXTERNAL_PORT(0x0582, 0x0016, 3, "%s MIDI 2"),
 	/* Edirol UM-550 */
-	{ USB_ID(0x0582, 0x0023), 5, "%s Control" },
+	CONTROL_PORT(0x0582, 0x0023, 5, "%s Control"),
 	/* Edirol SD-20 */
-	{ USB_ID(0x0582, 0x0027), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x0027), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x0027), 2, "%s MIDI" },
+	ROLAND_SYNTH_PORT(0x0582, 0x0027, 0, "%s Part A", 64),
+	ROLAND_SYNTH_PORT(0x0582, 0x0027, 1, "%s Part B", 64),
+	EXTERNAL_PORT(0x0582, 0x0027, 2, "%s MIDI"),
 	/* Edirol SD-80 */
-	{ USB_ID(0x0582, 0x0029), 0, "%s Part A" },
-	{ USB_ID(0x0582, 0x0029), 1, "%s Part B" },
-	{ USB_ID(0x0582, 0x0029), 2, "%s MIDI 1" },
-	{ USB_ID(0x0582, 0x0029), 3, "%s MIDI 2" },
+	ROLAND_SYNTH_PORT(0x0582, 0x0029, 0, "%s Part A", 128),
+	ROLAND_SYNTH_PORT(0x0582, 0x0029, 1, "%s Part B", 128),
+	EXTERNAL_PORT(0x0582, 0x0029, 2, "%s MIDI 1"),
+	EXTERNAL_PORT(0x0582, 0x0029, 3, "%s MIDI 2"),
 	/* Edirol UA-700 */
-	{ USB_ID(0x0582, 0x002b), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x002b), 1, "%s Control" },
+	EXTERNAL_PORT(0x0582, 0x002b, 0, "%s MIDI"),
+	CONTROL_PORT(0x0582, 0x002b, 1, "%s Control"),
 	/* Roland VariOS */
-	{ USB_ID(0x0582, 0x002f), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x002f), 1, "%s External MIDI" },
-	{ USB_ID(0x0582, 0x002f), 2, "%s Sync" },
+	EXTERNAL_PORT(0x0582, 0x002f, 0, "%s MIDI"),
+	EXTERNAL_PORT(0x0582, 0x002f, 1, "%s External MIDI"),
+	EXTERNAL_PORT(0x0582, 0x002f, 2, "%s Sync"),
 	/* Edirol PCR */
-	{ USB_ID(0x0582, 0x0033), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x0033), 1, "%s 1" },
-	{ USB_ID(0x0582, 0x0033), 2, "%s 2" },
+	EXTERNAL_PORT(0x0582, 0x0033, 0, "%s MIDI"),
+	EXTERNAL_PORT(0x0582, 0x0033, 1, "%s 1"),
+	EXTERNAL_PORT(0x0582, 0x0033, 2, "%s 2"),
 	/* BOSS GS-10 */
-	{ USB_ID(0x0582, 0x003b), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x003b), 1, "%s Control" },
+	EXTERNAL_PORT(0x0582, 0x003b, 0, "%s MIDI"),
+	CONTROL_PORT(0x0582, 0x003b, 1, "%s Control"),
 	/* Edirol UA-1000 */
-	{ USB_ID(0x0582, 0x0044), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x0044), 1, "%s Control" },
+	EXTERNAL_PORT(0x0582, 0x0044, 0, "%s MIDI"),
+	CONTROL_PORT(0x0582, 0x0044, 1, "%s Control"),
 	/* Edirol UR-80 */
-	{ USB_ID(0x0582, 0x0048), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x0048), 1, "%s 1" },
-	{ USB_ID(0x0582, 0x0048), 2, "%s 2" },
+	EXTERNAL_PORT(0x0582, 0x0048, 0, "%s MIDI"),
+	EXTERNAL_PORT(0x0582, 0x0048, 1, "%s 1"),
+	EXTERNAL_PORT(0x0582, 0x0048, 2, "%s 2"),
 	/* Edirol PCR-A */
-	{ USB_ID(0x0582, 0x004d), 0, "%s MIDI" },
-	{ USB_ID(0x0582, 0x004d), 1, "%s 1" },
-	{ USB_ID(0x0582, 0x004d), 2, "%s 2" },
+	EXTERNAL_PORT(0x0582, 0x004d, 0, "%s MIDI"),
+	EXTERNAL_PORT(0x0582, 0x004d, 1, "%s 1"),
+	EXTERNAL_PORT(0x0582, 0x004d, 2, "%s 2"),
 	/* Edirol UM-3EX */
-	{ USB_ID(0x0582, 0x009a), 3, "%s Control" },
+	CONTROL_PORT(0x0582, 0x009a, 3, "%s Control"),
 	/* M-Audio MidiSport 8x8 */
-	{ USB_ID(0x0763, 0x1031), 8, "%s Control" },
-	{ USB_ID(0x0763, 0x1033), 8, "%s Control" },
+	CONTROL_PORT(0x0763, 0x1031, 8, "%s Control"),
+	CONTROL_PORT(0x0763, 0x1033, 8, "%s Control"),
 	/* MOTU Fastlane */
-	{ USB_ID(0x07fd, 0x0001), 0, "%s MIDI A" },
-	{ USB_ID(0x07fd, 0x0001), 1, "%s MIDI B" },
+	EXTERNAL_PORT(0x07fd, 0x0001, 0, "%s MIDI A"),
+	EXTERNAL_PORT(0x07fd, 0x0001, 1, "%s MIDI B"),
 	/* Emagic Unitor8/AMT8/MT4 */
-	{ USB_ID(0x086a, 0x0001), 8, "%s Broadcast" },
-	{ USB_ID(0x086a, 0x0002), 8, "%s Broadcast" },
-	{ USB_ID(0x086a, 0x0003), 4, "%s Broadcast" },
+	EXTERNAL_PORT(0x086a, 0x0001, 8, "%s Broadcast"),
+	EXTERNAL_PORT(0x086a, 0x0002, 8, "%s Broadcast"),
+	EXTERNAL_PORT(0x086a, 0x0003, 4, "%s Broadcast"),
 };
 
+static struct port_info *find_port_info(struct snd_usb_midi* umidi, int number)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(snd_usbmidi_port_info); ++i) {
+		if (snd_usbmidi_port_info[i].id == umidi->chip->usb_id &&
+		    snd_usbmidi_port_info[i].port == number)
+			return &snd_usbmidi_port_info[i];
+	}
+	return NULL;
+}
+
+static void snd_usbmidi_get_port_info(struct snd_rawmidi *rmidi, int number,
+				      struct snd_seq_port_info *seq_port_info)
+{
+	struct snd_usb_midi *umidi = rmidi->private_data;
+	struct port_info *port_info;
+
+	/* TODO: read port flags from descriptors */
+	port_info = find_port_info(umidi, number);
+	if (port_info) {
+		seq_port_info->type = port_info->seq_flags;
+		seq_port_info->midi_voices = port_info->voices;
+	}
+}
+
 static void snd_usbmidi_init_substream(struct snd_usb_midi* umidi,
 				       int stream, int number,
 				       struct snd_rawmidi_substream ** rsubstream)
 {
-	int i;
+	struct port_info *port_info;
 	const char *name_format;
 
 	struct snd_rawmidi_substream *substream = snd_usbmidi_find_substream(umidi, stream, number);
@@ -1110,14 +1171,8 @@
 	}
 
 	/* TODO: read port name from jack descriptor */
-	name_format = "%s MIDI %d";
-	for (i = 0; i < ARRAY_SIZE(snd_usbmidi_port_names); ++i) {
-		if (snd_usbmidi_port_names[i].id == umidi->chip->usb_id &&
-		    snd_usbmidi_port_names[i].port == number) {
-			name_format = snd_usbmidi_port_names[i].name_format;
-			break;
-		}
-	}
+	port_info = find_port_info(umidi, number);
+	name_format = port_info ? port_info->name : "%s MIDI %d";
 	snprintf(substream->name, sizeof(substream->name),
 		 name_format, umidi->chip->card->shortname, number + 1);
 
@@ -1457,6 +1512,10 @@
 	return 0;
 }
 
+static struct snd_rawmidi_global_ops snd_usbmidi_ops = {
+	.get_port_info = snd_usbmidi_get_port_info,
+};
+
 static int snd_usbmidi_create_rawmidi(struct snd_usb_midi* umidi,
 				      int out_ports, int in_ports)
 {
@@ -1472,6 +1531,7 @@
 	rmidi->info_flags = SNDRV_RAWMIDI_INFO_OUTPUT |
 			    SNDRV_RAWMIDI_INFO_INPUT |
 			    SNDRV_RAWMIDI_INFO_DUPLEX;
+	rmidi->ops = &snd_usbmidi_ops;
 	rmidi->private_data = umidi;
 	rmidi->private_free = snd_usbmidi_rawmidi_free;
 	snd_rawmidi_set_ops(rmidi, SNDRV_RAWMIDI_STREAM_OUTPUT, &snd_usbmidi_output_ops);
