This driver was written because I really needed it for the work I'm doing. So it has kind of limited functionality (only stuff that I need). However I might add enhancements to it if:
Right now the driver accepts only raw data which just being sent to the DAC, and only first two bytes of the write request are sent to the driver. So, user space code should provide all the timing and required data conversion. This was done for multiple reasons. First is that to doing high resulution timing in kernel requires using of udelay which is major CPU hog, and at the time of writing this driver it was implemented as SMP unfriendly function. Second, is that my application is not time sensitive at all, so I didn't bother much with this problem at all. As for data conversion issue, I didn't implement it in the driver because actual voltages depend a lot on the way your DAC is wired and it the amount of code for support of bipolar operation in the kernel space greatly exceeds the amount of code for the user space, in fact I might put a little software library for doing data conversion in the user space. So the only reason for doing timing / data conversion in the kernel space is if you already got an application and you need to get this driver fitted for it. Then, you are welcome to enhance the driver yourself and send code back to me or you can try to ask me to enhance the driver.
This driver was written for PCI40A industry pack carrier board, that's the only one I have. I see no reason why this driver won't work with PCI40B , but DMA transfers wouldn't be supported.
Right now driver has the output gain of x2, I'm thinking about implementing IOCTL system call for changing the gain. If your application requires x4 gain then send me a note.