I'm replying to myself, just that someone else could propably find (by googling) the issue interesting
Anyway, I solved my problem by using a new char device and class for my USB device. alloc_chrdev_region(&x2s_dev, 0, X2S_NR_OF_DEVICES*X2S_MINORS, "x2s_usb"); x2s_class = class_simple_create(THIS_MODULE, "x2s_usb"); And then I was able to do whatever I wanted with the char device entries and minors. Now I have only firmware loading device appearing upon plug-in. The block and iso streams become available, when the firmware is succesfully loaded. How reasonable it is to create new classes, I don't know. But it works. Jouni On Mon, 2005-08-29 at 09:56 +0300, Jouni Rynö wrote: > The problem with reimplementing the usb_register_dev() is the non > existing external access to the "static struct file_operations > *usb_minors[MAX_USB_MINORS]". > > The FPGA board itself has only iso endpoints, the rest of the system is > controlled via control messages. One could in principle implement the > access via library, but then that would need wrappers for different > languges. A file access interface is much much cleaner to do, and > something the hardware designers mentally like better :) > > > So now I have working hack, of which I'm not very proud of :( > > First the probel: > > usb_set_intfdata(interface, dev); > > retval = usb_register_dev(interface, &x2s_firmware); > if (retval) { > err ("Not able to get a minor for this device."); > usb_set_intfdata(interface, NULL); > goto error; > } > dev->io_minors[0] = interface->minor; > info ("USB X2S device firmware now attached to minor %d", > interface->minor); > retval = usb_register_dev(interface, &x2s_io); > if (retval) { > err ("Not able to get a minor for this device."); > usb_set_intfdata(interface, NULL); > goto error; > } > dev->io_minors[1] = interface->minor; > info ("USB X2S device io now attached to minor %d", interface->minor); > retval = usb_register_dev(interface, &x2s_iso); > if (retval) { > err ("Not able to get a minor for this device."); > usb_set_intfdata(interface, NULL); > goto error; > } > dev->io_minors[2] = interface->minor; > info ("USB X2S device iso now attached to minor %d", interface->minor); > interface->minor = dev->io_minors[0]; > dev->minor = interface->minor; > > > and then in the open(): > > minor = iminor(inode); > > interface = usb_find_interface(&x2s_driver, minor); > if (!interface) { > interface = usb_find_interface(&x2s_driver, minor-1); > if (!interface) { > interface = usb_find_interface(&x2s_driver, minor-2); > if (!interface) { > err("%s-error, can't find device for minor %d", > __FUNCTION__, minor); > return -ENODEV; > } > } > } > > dev = usb_get_intfdata(interface); > if (!dev) { > return -ENODEV; > } > > index = -1; > for (ii=0;ii<X2S_MINORS;ii++) { > if (minor == dev->io_minors[ii]) { > index = ii; > } > } > dbg ( " - minor is %d, index %i", minor, index); > if (index < 0) { > return -ENODEV; > } > > > > regards > Jouni > > > > On Thu, 2005-08-25 at 15:03 +0200, Clemens Ladisch wrote: > > Jouni Rynö wrote: > > > I try to upgrade my x2s_usb 2.4 kernel driver to 2.6. > > > > > > On 2.4 the driver had 6 /dev entries (via devfs) > > > > > > Now I have to say, that I cannot figure out the proper way to > > > generate these /dev entries for the USB-driver. None of the kernel > > > provided drivers seem to have that kind of multiple interface. > > > > The ALSA drivers do this. Their device registrations end up in > > snd_register_device() (in sound/core/sound.c). > > > > The main difference to usb_register_dev() seems to be that the former > > stores the minors in a list. I'd guess you'd have to reimplement > > usb_register_dev() with this change. > > > > > > HTH > > Clemens > > -- Jouni Rynö mailto://[EMAIL PROTECTED]/ http://www.geo.fmi.fi/~ryno/ Finnish Meteorological Institute http://www.fmi.fi/ Space Research http://www.geo.fmi.fi/ P.O.BOX 503 Tel (+358)-9-19294656 FIN-00101 Helsinki FAX (+358)-9-19294603 Finland priv-GSM (+358)-50-5302903 "It's just zeros and ones, it cannot be hard" ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel