Martin Langer wrote: > my new USB-MIDI-Keyboard has two USB subclasses usb-midi and usb-audio. > Evolution, the manufacturer, told me "it's an Audio Class compliant device", > but I don't find a new entry in /proc/asound/seq/clients after loading the > modules. > > usb.c: registered new driver snd-usb-midi > snd-usb-midi: using interface 1 > snd-usb-midi: MIDIStreaming version 01.00 > snd-usb-midi: using 1 input jack(s) on endpoint 1 > snd-usb-midi: using 1 output jack(s) on endpoint 2 > snd-usb-midi: detected Evolution Electronics L MK-249C USB MIDI keyboa > usb.c: snd-usb-midi driver claimed interface dfe688d8 > > It's not typical to have a midi-keyboard with two subclasses, or?
As Pedro said, subclass 1 is an AudioControl interface. There should be two cards, one created by snd-usb-audio, and the other one created by snd-usb-midi (see /proc/asound/cards). The contents of the control interface (if there are any controls) should be visible in the output of the "lsusb" command. Your keyboard is unusual in two respects: it's an Audio Class compliant device (yes, this _is_ unusual for USB MIDI devices :-) , and it uses two endpoints, one for each direction. The combination of these two triggers an ugly bug in the descriptor parsing code (device_info isn't initialized). Please try the following patch (the current taciturnity of the driver is somewhat inconvenient, so it adds some error messages as well). Index: usb/usbmidi.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/usb/usbmidi.c,v retrieving revision 1.4 diff -u -r1.4 usbmidi.c --- usb/usbmidi.c 5 Jul 2002 13:39:28 -0000 1.4 +++ usb/usbmidi.c 30 Jul 2002 12:39:00 -0000 @@ -834,8 +834,10 @@ port = snd_seq_event_port_attach(umidi->seq_client, &port_callback, cap, type, port_name); - if (port < 0) + if (port < 0) { + snd_printk(KERN_ERR "cannot create port (error code %d)\n", +err); return port; + } if (in) umidi->endpoints[ep].in->ports[c].seq_port = port; @@ -1084,6 +1086,8 @@ usb_ms_endpoint_descriptor_t* ms_ep; int i, epidx; + memset(device_info, 0, sizeof(*device_info)); + if (usb_device->descriptor.iManufacturer == 0 || usb_string(usb_device, usb_device->descriptor.iManufacturer, device_info->vendor, sizeof(device_info->vendor)) < 0) @@ -1180,12 +1184,15 @@ { usbmidi_device_info_t device_info; snd_card_t* card = NULL; + int err; if (snd_usbmidi_get_device_info(device, ifnum, device_id, &device_info) == 0) { printk(KERN_INFO "snd-usb-midi: detected %s %s\n", device_info.vendor, device_info.product); - snd_usbmidi_card_create(device, &device_info, &card); + err = snd_usbmidi_card_create(device, &device_info, &card); + if (err < 0) + snd_printk(KERN_ERR "cannot create card (error code %d)\n", +err); } return card; } > ... and doing rmmod snd-usb-midi and rmmod snd-usb-audio ends here with > Segmentation fault: > > Jul 28 22:28:10 tuba kernel: usb.c: deregistering driver snd-usb-midi > Jul 28 22:28:10 tuba kernel: Unable to handle kernel paging request at > virtual address 29323034 > > a small bug or a big hole? A small bug which results in a big mess. HTH Clemens ------------------------------------------------------- This sf.net email is sponsored by: Dice - The leading online job board for high-tech professionals. Search and apply for tech jobs today! http://seeker.dice.com/seeker.epl?rel_code=31 _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel