[LAU] Bridging alsa and jack midi

Tito Latini tito.01beta at gmail.com
Wed Oct 1 07:19:41 UTC 2014

On Tue, Sep 30, 2014 at 11:42:33PM +0200, Ralf Mardorf wrote:
> On Tue, 2014-09-30 at 14:24 -0700, Len Ovens wrote:
> > Why would qjc or aj-s use something different?
> I don't know, but restoring doesn't work.
> > My first response is that this is a bug because there is enough 
> > information there that each port is unique.
> And a bug that was more than one time reported, that's why I again asked
> for a workaround.
> > I think if it was me, and I was changing the description with udev, I 
> > would change both of them to shorter names with no spaces like TT_0
> > and TT_1
> Backward compatibility, at least restoring when just the first card was
> used should work, so keeping the original name makes sense. Anyway, for
> the MIDI names the udev rule doesn't work.

I have a workaround (no tested).

'TerraTec EWX24/96' is the shortname of your soundcard and it is used
to set the rawmidi name (`snd_mpu401_uart_new' called in ice1712.c,
the source of the kernel module). So, if you change the shortname, you
also change the rawmidi name.

The info about the irq number is enough to get two different rawmidi
names. The new shortname after the follow patch is

    'TerraTec EWX24/96, irq %d'

consequently the longname becomes

    'TerraTec EWX24/96, irq %d at 0x%lx'

The new rawmidi name is

    'TerraTec EWX24/96, irq %d MIDI'

You can change the format of the string by editing the patch
(the maxsize for shortname is 31 characters). You can also edit the
basename for your card in linux/sound/pci/ice1712/ews.c:1035.

diff -ur linux~/sound/pci/ice1712/ice1712.c linux/sound/pci/ice1712/ice1712.c
--- linux~/sound/pci/ice1712/ice1712.c	2014-10-01 08:02:27.208159287 +0200
+++ linux/sound/pci/ice1712/ice1712.c	2014-10-01 08:03:49.868120111 +0200
@@ -2688,7 +2688,8 @@
 		for (c = *tbl; c->subvendor; c++) {
 			if (c->subvendor == ice->eeprom.subvendor) {
 				ice->card_info = c;
-				strcpy(card->shortname, c->name);
+                                sprintf(card->shortname, "%s, irq %i", c->name,
+                                        ice->irq);
 				if (c->driver) /* specific driver? */
 					strcpy(card->driver, c->driver);
 				if (c->chip_init) {
@@ -2786,8 +2787,7 @@
 	snd_ice1712_set_input_clock_source(ice, 0);
-	sprintf(card->longname, "%s at 0x%lx, irq %i",
-		card->shortname, ice->port, ice->irq);
+	sprintf(card->longname, "%s at 0x%lx", card->shortname, ice->port);
 	err = snd_card_register(card);
 	if (err < 0) {

More information about the Linux-audio-user mailing list