On Mon, Jun 16, 2008 at 12:11:31PM -0400, Jon Smirl wrote:
A more familiar example of this problem is unified graphics drivers. NVidia probably has 100 variations on their GPUs. They used to have
Yes, nothing you're doing should be this difficult - it's a very standard problem. AFAICT the main issue you're running into here is that the way the PowerPC device trees are done it's difficult for you to idomatically do things based on the board type you're running on.
I'm wondering if it might be worth adding some sort of infrastructure which would allow drivers to load based on the machine type - not by defining a device type, just by saying "load me on board X"? This would be very similar to how DMI information is used on x86 systems to handle similar situations.
To do this I'll put all of the device drivers on an initrd. Then as the kernel processes the device tree the right drivers will get loaded. After the boot process is finished the initrd and unused drivers disappear. Moving the fabric device creation in the my equivalent of arch/powerpc/platforms/86xx/mpc8610_hpcd.c will let me do this.
That's pretty much how most platforms using platform devices would handle this.
BTW, if you read in /Documentation about platform drivers they say not to make the devices in the module init function because it causes problems like the one I'm having.
Right, and this is not expected to happen in production ASoC v2 drivers - for ARM boards the idomatic thing would be for the setup to happen in board specific initialisation code under arch/arm.