Search Linux Wireless

[PATCH RFC] bcma: use two different initcalls if built-in

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
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(-)

diff --git a/drivers/bcma/main.c b/drivers/bcma/main.c
index 9635f10..c394207 100644
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -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)
 {
-- 
1.8.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux