mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/drivers/bcma/main.c
 | 
						|
+++ b/drivers/bcma/main.c
 | 
						|
@@ -637,11 +637,36 @@ static int bcma_device_uevent(struct dev
 | 
						|
 			      core->id.rev, core->id.class);
 | 
						|
 }
 | 
						|
 
 | 
						|
-static int __init bcma_modinit(void)
 | 
						|
+static unsigned int bcma_bus_registered;
 | 
						|
+
 | 
						|
+/*
 | 
						|
+ * If built-in, bus has to be registered early, before any driver calls
 | 
						|
+ * bcma_driver_register.
 | 
						|
+ * Otherwise registering driver would trigger BUG in driver_register.
 | 
						|
+ */
 | 
						|
+static int __init bcma_init_bus_register(void)
 | 
						|
 {
 | 
						|
 	int err;
 | 
						|
 
 | 
						|
+	if (bcma_bus_registered)
 | 
						|
+		return 0;
 | 
						|
+
 | 
						|
 	err = bus_register(&bcma_bus_type);
 | 
						|
+	if (!err)
 | 
						|
+		bcma_bus_registered = 1;
 | 
						|
+
 | 
						|
+	return err;
 | 
						|
+}
 | 
						|
+#ifndef MODULE
 | 
						|
+fs_initcall(bcma_init_bus_register);
 | 
						|
+#endif
 | 
						|
+
 | 
						|
+/* Main initialization has to be done with SPI/mtd/NAND/SPROM available */
 | 
						|
+static int __init bcma_modinit(void)
 | 
						|
+{
 | 
						|
+	int err;
 | 
						|
+
 | 
						|
+	err = bcma_init_bus_register();
 | 
						|
 	if (err)
 | 
						|
 		return err;
 | 
						|
 
 | 
						|
@@ -660,7 +685,7 @@ static int __init bcma_modinit(void)
 | 
						|
 
 | 
						|
 	return err;
 | 
						|
 }
 | 
						|
-fs_initcall(bcma_modinit);
 | 
						|
+module_init(bcma_modinit);
 | 
						|
 
 | 
						|
 static void __exit bcma_modexit(void)
 | 
						|
 {
 |