Although it wasn't so bad getting it to transmit and receive data, getting the driver to behave stably has been elusive. In particular, the locking scheme is not working. Code modifications are under way to base the locking scheme off of the pl2302 USB-serial driver. mos7703 currently uses mutexes, but I'm converting the code to spinlocks since this was generally recommended to me anyway. I also posted on linuxquestions.org hoping to get someone to take a look at it, but didn't recieve any responses. See it at http://www.linuxquestions.org/questions/linux-kernel-70/mos7703-serial-driver-714933/ Once I get more of a reasonably solid driver working, I'll post to the Linux Kernel Mailling List.
I've also recieved techniques for keeping compatibility across kernels. I've managed to clean up the code and use less preprocessor logic. This mostly involves using some high level wrapper functions for different kernels, and then using a few inline core functions to do the actual logic. Also trying to clean up some of the ugly macros around this.