Why do you need to compile certain kernel drivers as modules?
I had this question when I was trying to compile my own kernel.
The answer (found HERE, credits goes to pietinger on the Gentoo Wiki and Gentoo Forums) is because certain drivers need firmware available to work correctly. When the driver is compiled as a module, the module is loaded after the root filesystem is mounted and since /lib/firmware is inside the root filesystem, the module is able to load the firmware it needs.
When the driver is compiled as built-in, it is unable to load the firmware from the root filesystem because the driver loads before the root filesystem is available, making it unable to load firmware from /lib/firmware.
This post is licensed under CC BY 4.0 by the author.