I patched my Linux kernel (now v4.9.25) - this solved the problem. User chripell described here http://zwoug.org/viewtopic.php?f=17&t=6901http://zwoug.org/viewtopic.php?f=17&t=6901, which lines have to be altered. It is not as hard as one might think.
To sum up what has been said elsewhere in this forum:
The USB standard defines so called "endpoints", which can send or receive data. They come in different types for different purposes. See here: http://www.makelinux.net/ldd3/chp-13-sect-1http://www.makelinux.net/ldd3/chp-13-sect-1 For transferring large amounts of data there are the "bulk" and the "isochronous" endpoints. The USB2.0 standard specifies for each endpoint type how many bytes can be sent in one packet. For bulk endpoints the standard says 512 bytes, for isochronous 1024 bytes. The problem now is, that the standard ASI firmware uses bulk endpoints, but tries to send 1024 bytes. Newer Linux kernels refuse to accept this and try to enforce the official standard. Windows does not do that. The result is that the camera doesn't work. The compatible firmware version fixes this by setting the correct value of 512, but in turn gets much lower transfer rates which render the cameras almost unusable in some cases. Linux acts so strict for software security reasons.
The correct fix for the firmware / USB drivers would be to use isochronous endpoints for the video data transfer in order to comply with the standard. This would probably erase many of the problems Linux users have - unless there is a very good reason not to use isochronous endpoints. I am not an expert, so my judgment might be wrong.
DEAR DEVELOPERS: You might really consider this, as I am probably one of the first to get a newer kernel with version 4.x - many more will follow as soon as Debian 9 is officially released, so you will get a lot more complaints. And not everybody can patch the kernel.
_________________________________________________________________________
The Linux kernel is the "heart" of the system. It handles everything that happens at a low level - including USB cameras. I did this for kernel version 4.9.25.
Follow the instructions given here, but handle them with care:
http://www.makeuseof.com/tag/compile-linux-kernel/http://www.makeuseof.com/tag/compile-linux-kernel/
https://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-officialhttps://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official (Section 4.5)
What I did:
sudo apt-get install linux-source - and all the other stuff needed, you can specify the kernel version and can take the same you already have or a newer one, google how to specify package versions
change directory, unpack etc
Go to the file /drivers/usb/core/config.c
Find the following lines and comment them out (as chripell described earlier) - this is the dirty fix to make the camera work:
if (maxp > j) {
dev_warn(ddev, "config %d interface %d altsetting %d endpoint 0x%X has invalid maxpacket %d, setting to %d\n)",
cfgno, inum, asnum, d->bEndpointAddress, maxp, j);
// COMMENTED OUT maxp = j;
// THIS TOO endpoint->desc.wMaxPacketSize = cpu_to_le16(i | maxp);
}
Save the changes (as root/sudo).
sudo make nconfig -> just press F9 and save, creates a .config file which says what needs to be compiled
IMPORTANT:
sudo scripts/config --disable DEBUG_INFO -> otherwise the created kernel is huge and the compilation takes ages
sudo make deb-pkg -j $(nproc --all) -> wait around 40 minutes - around 2GB of files are created, but in the end you use only 400MB or so
sudo dpkg -i ../linux-image-XXXXXX.deb -> this installs the kernel.
reboot
Don't be afraid - you can still use the older kernel versions if everything fails by selecting them in the GRUB bootloader. You can then uninstall the failed kernel and try again or become desperate.
________________________________________________
I hope I described the problem and its solution more or less correctly and was able to help you. And I look forward to a proper driver/firmware solution! I now get 20FPS at 1280x960 and 200FPS at 320x240 with the 120MM again, with other USB devices connected and operating.