bcmdhd wifi driver: use kthread to run dhd_module_init, save time in initcall
authorhwg <hwg@rock-chips.com>
Mon, 13 Apr 2015 00:37:27 +0000 (08:37 +0800)
committerhwg <hwg@rock-chips.com>
Mon, 13 Apr 2015 00:37:50 +0000 (08:37 +0800)
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c

index 2f678e6f171e8a2603f0f81596b563e7f2025b41..b0ee6e487408877122b8268cc6bea859e65b4153 100755 (executable)
@@ -7050,6 +7050,14 @@ extern int get_wifi_chip_type(void);
 extern char WIFI_MODULE_NAME[];
 extern char RKWIFI_DRV_VERSION[];
 
+#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
+static int wifi_init_thread(void *data)
+{
+    dhd_module_init();
+    return 0;
+}
+#endif
+
 int rockchip_wifi_init_module_rkwifi(void)
 {
 #ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
@@ -7061,7 +7069,16 @@ int rockchip_wifi_init_module_rkwifi(void)
     printk("=======================================================\n");
     printk("%s WiFi driver (Powered by Rockchip,Ver %s) init.\n", WIFI_MODULE_NAME, RKWIFI_DRV_VERSION);
 
+#ifdef CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
+{
+    struct task_struct *kthread = kthread_run(wifi_init_thread, NULL, "wifi_init_thread");
+    if (kthread->pid < 0)
+        printk("create wifi_init_thread failed.\n");
+    return 0; 
+}
+#else
     return dhd_module_init();
+#endif
 }
 
 void rockchip_wifi_exit_module_rkwifi(void)