I've stared working on separating the ACX driver into three modules. These would be called 'acx-common.ko', 'acx-pci.ko' and 'acx-usb.ko'. This leaves us with the problem of recursive dependencies at load time, but I'm working on solving this.

I've created a struct acx_ops which contains pointer functions to all the device-specific functions (the ones in usb.c or pci.c) so we can also get rid of the generic functions which just call one or the other depending on chipset and connection. These create a lot of branches which is never good (even with good branch prediction).

The modules still can't find the generic functions because I still haven't exported most of them, but I'm busy right now fighting with preprocessor magic around the _debug family of functions

I expect to have a working setup by the end of next week. I'll send the patch and see what people think about it.