Hi Guys,
There's currently an issue with isoc transfers made by em28xx driver[1] and
ehcd_hci. If I try to start isoc transfers on more than one hardware, the
second hardware fails at usb_submit_urb() with -ENOSPC.
The current code that initializes isoc transfers looks like this (I've removed
error handling and replaced some constants to make it cleaner to read):
max_pkt_size = 3072;
size = 40 * max_pkt_size;
for (i = 0; i < 5; i++) {
urb = usb_alloc_urb(40, GFP_KERNEL);
dev->transfer_buffer[i] = usb_buffer_alloc(usb_dev, size,
GFP_KERNEL, &urb->transfer_dma);
memset(dev->transfer_buffer[i], 0, size);
urb->dev = usb_udev;
urb->context = v4l_dev;
urb->pipe = usb_rcvisocpipe(usb_dev, 0x82);
urb->transfer_flags = URB_ISO_ASAP;
urb->interval = 1;
urb->transfer_buffer = dev->transfer_buffer[i];
urb->complete = em28xx_isocIrq;
urb->number_of_packets = 40;
urb->transfer_buffer_length = size;
for (j = 0; j < 40; j++)
urb->iso_frame_desc[j].offset = j * max_pkt_size;
dev->urb[i] = urb;
}
for (i = 0; i < 5; i++)
usb_submit_urb(dev->urb[i], GFP_KERNEL);
Any ideas on how this could work?
[1] The complete code is at:
http://linuxtv.org/hg/v4l-dvb/file/3be355e3e327/linux/drivers/media/video/em28xx/em28xx-core.c
Cheers,
Mauro
-
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html