I've made some more patches for the ALSA bt87x audio driver to support more features of the Osprey 440 card.
In order to support certain features, the ALSA driver needs access to the bt878's GPIO lines and I2C bus. These are controlled by PCI function 0, which is driven by the V4L driver. The bt878 DVB driver (which drives PCI function 1 just like the ALSA driver) needs to do the same thing and there is already some code to handle it.
So, the ALSA driver (snd-bt87x) needs to use functions from the V4L driver (bttv). As it is now, the two drivers are completely separate and don't share any code and can be loaded individually.
The DVB driver in the same tree as bttv, so this isn't a problem. But the snd-bt87x is in another tree, so it's somewhat harder, and I'm not sure what to do about it.
The driver will need some header files from the bttv directory. I guess this can be handled by adding a -I flag in the Makefile, though that seems a little ugly.
The bigger problem is that changes to snd-bt87x will depend on changes to bttv. How can the ALSA build system handle this?
For instance, my patch to add a digital volume control to snd-bt87x requires a new function to be exported from bttv. How will ALSA build snd-bt87x if the kernel source doesn't yet have this function?