@@ -637,13 +637,25 @@ static int bcma_device_uevent(struct device *dev, struct kobj_uevent_env *env)
core->id.rev, core->id.class);
}
+/* Bus has to be registered early, before any bcma driver */
+static int __init bcma_modinit_early(void)
+{
+ return bus_register(&bcma_bus_type);
+}
+#ifndef MODULE
+fs_initcall(bcma_modinit_early);
+#endif
+
+/* Initialization has to be done later with SPI/mtd/NAND/SPROM available */
static int __init bcma_modinit(void)
{
int err;
- err = bus_register(&bcma_bus_type);
+#ifdef MODULE
+ err = bcma_modinit_early();
if (err)
return err;
+#endif
err = bcma_host_soc_register_driver();
if (err) {
@@ -660,7 +672,7 @@ static int __init bcma_modinit(void)
return err;
}
-fs_initcall(bcma_modinit);
+module_init(bcma_modinit);
static void __exit bcma_modexit(void)
{
This is needed as we can't initialize bus during fs_initcall. Initialization requires SPROM which depends on NVRAM which depends on mtd. Since mtd, spi, nand, spi-nor use standard module_init, we have to do the same in bcma. Without this we'll try to initialize SPROM without having a ready SPROM proviver registered using bcma_arch_register_fallback_sprom. Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com> --- While this patch seems to work and I can compile bcma as built-in and module, I'm not too proud of it. I don't really like these #if(n)def tricks and I'm afraid bcma_modinit may be called even if bcma_modinit_early failed. Do you see any better idea of solving this? --- drivers/bcma/main.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)