Hartmut Geissbauer wrote: > But to me it looks like, the audio interfaces are detected > correctly as well. > > C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA > C: #Ifs= 5 Cfg#= 2 Atr=c0 MxPwr= 0mA
Configuration #1 is still active. > ... snd-usb-audio is in use. Don't ask me from whom. lsmod won't > tell me. > > Module Size Used by > snd_usb_audio 70710 1 > > ERROR: Removing 'snd_usb_audio': Device or resource busy > > It isn't released even if I unplug the device. It seems it isn't possible to change the configuration at the place I tried to do it, and the USB core gets thoroughly confused. > > If that doesn't work, it would be possible to write a separate program > > that switches the configuration, so that the audio driver can be > > loaded later. > > > Am I right, that this separate program is handled by hotplug? Yes (if somebody writes a hotplug script for it). > Might the patch(the code in it) for usbaudio.c you posted before be > helpfull for the program? No. Please remove the patch. Then compile the attached program (it requires libusb), and run it by hand; after that, load snd-usb-audio. > BTW: How many devices/"cards" is the snd-usb-audio driver able to > handle? 8 (ALSA's card limit) HTH Clemens
/* * noahinit.c - initialize a Creamware Noah to configuration #2 * * ... blah blah ... freeware ... blah blah ... no warranty ... blah blah ... * * compile with "gcc -o noahinit noahinit.c -lusb" */ #include <stdio.h> #include <usb.h> static void noah_init(struct usb_device *dev) { usb_dev_handle *h = usb_open(dev); if (!h) { puts("Open failed!"); return; } puts("Setting configuration 2"); usb_set_configuration(h, 2); usb_close(h); } int main(void) { struct usb_bus *bus; struct usb_device *dev; usb_set_debug(1); usb_init(); usb_find_busses(); usb_find_devices(); for (bus = usb_get_busses(); bus; bus = bus->next) { for (dev = bus->devices; dev; dev = dev->next) { if (dev->descriptor.idVendor == 0x1107 && dev->descriptor.idProduct == 0x0102) { printf("found Creamware Noah at %s\n", dev->filename); noah_init(dev); } } } return 0; }