wifi: build together with rkwifi, esp8089, rtl8188eu driver, avoid config change
authorhwg <hwg@rock-chips.com>
Wed, 13 Aug 2014 07:11:50 +0000 (15:11 +0800)
committerhwg <hwg@rock-chips.com>
Wed, 13 Aug 2014 07:13:15 +0000 (15:13 +0800)
arch/arm/boot/dts/rk3288-tb_8846.dts
arch/arm/configs/rockchip_defconfig
drivers/net/wireless/Kconfig
drivers/net/wireless/rockchip_wlan/esp8089/sdio_stub.c
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c
drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c
include/linux/rfkill-wlan.h
net/rfkill/rfkill-wlan.c

index 70cf2835c9d26790e6abb6070f540afefdc46db0..aee15d67da0f6d869d74f324b609d1c8901a909b 100644 (file)
     wireless-wlan {
         compatible = "wlan-platdata";
 
-        wifi_chip_type = "";
+        wifi_chip_type = "rkwifi"; // rkwifi, like ap6xxx, rk90x
+                             // rtl8188eu
+                             // esp8089
+                             // other, for other wifi
         sdio_vref = <1800>; //1800mv or 3300mv
 
         //power_ctrl_by_pmu;
index 647b99f91b6b5644b740244f2a0a2ced867d45a7..eaa12eed396a377abb619eeb0e16966327fff713 100644 (file)
@@ -275,6 +275,8 @@ CONFIG_USB_HSO=y
 CONFIG_USB_NET_INT51X1=y
 CONFIG_USB_IPHETH=y
 CONFIG_USB_SIERRA_NET=y
+CONFIG_RTL8188EU=y
+CONFIG_ESP8089=y
 CONFIG_RKWIFI=y
 CONFIG_AP6335=y
 # CONFIG_INPUT_MOUSEDEV is not set
index 0cfaa2afdff32d86cce014a43cb97fe0534ff140..3fabd90ba02f746caa18aca79d231de0912353d5 100644 (file)
@@ -17,32 +17,24 @@ menuconfig WLAN
 
 if WLAN
 
-choice
-       prompt "WiFi device driver support"
-       default WIFI_NONE
-
-       config WIFI_NONE
-         bool "No WiFi"
-
-       config RDA5990
-         depends on WLAN_80211 && MMC
-         select WIRELESS_EXT
-         select WEXT_PRIV
-         select IEEE80211
-         bool "rda 5990p"
-         ---help---
-           rda5990P fm bt wifi
+#      config RDA5990
+#        depends on WLAN_80211 && MMC
+#        select WIRELESS_EXT
+#        select WEXT_PRIV
+#        select IEEE80211
+#        bool "rda 5990p"
+#        ---help---
+#          rda5990P fm bt wifi
            
-source "drivers/net/wireless/rockchip_wlan/mt5931/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8192cu/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8192du/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/mt5931/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8192cu/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8192du/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8723au/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8723as/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/rtl8723bs/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8723au/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8723as/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/rtl8723bs/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/esp8089/Kconfig"
 source "drivers/net/wireless/rockchip_wlan/rkwifi/Kconfig"
-endchoice
 
 choice 
        depends on RKWIFI
@@ -120,15 +112,15 @@ choice
 
 endchoice
 
-menuconfig MTK_WIRELESS_SOLUTION       
-       bool "MTK wireless chip configuration"
-       help
-         "enable/disable and config MTK wireless solution"
+#menuconfig MTK_WIRELESS_SOLUTION      
+#      bool "MTK wireless chip configuration"
+#      help
+#        "enable/disable and config MTK wireless solution"
 
-if MTK_WIRELESS_SOLUTION
-source "drivers/net/wireless/rockchip_wlan/combo_mt66xx/Kconfig"
-source "drivers/net/wireless/rockchip_wlan/mt5931_kk/Kconfig"
-endif # MTK_WIRELESS_SOLUTION
+#if MTK_WIRELESS_SOLUTION
+#source "drivers/net/wireless/rockchip_wlan/combo_mt66xx/Kconfig"
+#source "drivers/net/wireless/rockchip_wlan/mt5931_kk/Kconfig"
+#endif # MTK_WIRELESS_SOLUTION
 
 endif
 
index 4712559b47acebb61aef1186ddaabda932608cc4..f097570115b767570fc6413b57a92a26b7df1062 100755 (executable)
@@ -16,13 +16,13 @@ extern int esp_sdio_init(void);
 extern void esp_sdio_exit(void)  ;
 
 #if 1
-int rockchip_wifi_init_module(void)
+int rockchip_wifi_init_module_esp8089(void)
 {
                
 return esp_sdio_init();                
 }
 
-void rockchip_wifi_exit_module(void)
+void rockchip_wifi_exit_module_esp8089(void)
 {
        esp_sdio_exit(); 
                 
@@ -113,8 +113,8 @@ void sif_platform_ack_interrupt(struct esp_pub *epub)
 
 }
 #endif //ESP_ACK_INTERRUPT
-EXPORT_SYMBOL(rockchip_wifi_init_module);
-EXPORT_SYMBOL(rockchip_wifi_exit_module);
+EXPORT_SYMBOL(rockchip_wifi_init_module_esp8089);
+EXPORT_SYMBOL(rockchip_wifi_exit_module_esp8089);
 
 //module_init(esp_sdio_init);
 //module_exit(esp_sdio_exit);
index 0e35b1763674dae19b73e3ce6ad251e4cbd9a31a..be3fd04339c86e271157663964dd21e552b66512 100755 (executable)
@@ -5021,7 +5021,7 @@ fail_0:
 extern char WIFI_MODULE_NAME[];
 extern char RKWIFI_DRV_VERSION[];
 
-int rockchip_wifi_init_module(void)
+int rockchip_wifi_init_module_rkwifi(void)
 {
     printk("=======================================================\n");
     printk("==== Launching Wi-Fi driver! (Powered by Rockchip) ====\n");
@@ -5031,7 +5031,7 @@ int rockchip_wifi_init_module(void)
     return dhd_module_init();
 }
 
-void rockchip_wifi_exit_module(void)
+void rockchip_wifi_exit_module_rkwifi(void)
 {
     printk("=======================================================\n");
     printk("== Dis-launching Wi-Fi driver! (Powered by Rockchip) ==\n");
@@ -5039,8 +5039,8 @@ void rockchip_wifi_exit_module(void)
     dhd_module_cleanup();
 }
 
-EXPORT_SYMBOL(rockchip_wifi_init_module);
-EXPORT_SYMBOL(rockchip_wifi_exit_module);
+EXPORT_SYMBOL(rockchip_wifi_init_module_rkwifi);
+EXPORT_SYMBOL(rockchip_wifi_exit_module_rkwifi);
 //late_initcall(rockchip_wifi_init_module);
 //module_exit(rockchip_wifi_exit_module);
 /*
index 9f08c3bd7e41daea4c7e8eccf6281914b06a8bb3..514326b538a69432a6a154fe5bbc57c16cf1bbfd 100755 (executable)
@@ -1942,7 +1942,7 @@ static void rtw_drv_halt(void)
 #include "wifi_version.h"
 #include <linux/rfkill-wlan.h>
 
-int rockchip_wifi_init_module(void)
+int rockchip_wifi_init_module_rtl8188eu(void)
 {
     printk("\n");
     printk("=======================================================\n");
@@ -1954,7 +1954,7 @@ int rockchip_wifi_init_module(void)
     return rtw_drv_entry();
 }
 
-void rockchip_wifi_exit_module(void)
+void rockchip_wifi_exit_module_rtl8188eu(void)
 {
     printk("\n");
     printk("=======================================================\n");
@@ -1965,8 +1965,8 @@ void rockchip_wifi_exit_module(void)
     rockchip_wifi_power(0);
 }
 
-EXPORT_SYMBOL(rockchip_wifi_init_module);
-EXPORT_SYMBOL(rockchip_wifi_exit_module);
+EXPORT_SYMBOL(rockchip_wifi_init_module_rtl8188eu);
+EXPORT_SYMBOL(rockchip_wifi_exit_module_rtl8188eu);
 //module_init(rtw_drv_entry);
 //module_exit(rtw_drv_halt);
 
index db059579ed9f98fd49aa26b45a20ba082d68f5e6..c3a0347b0354f4b417b3527cd29487a683085b8d 100755 (executable)
 #include <asm/uaccess.h>
 #include <linux/rfkill-wlan.h>
 
+extern int get_wifi_chip_type(void);
+
 static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, char *_buf)
 {
     int count = 0;
+    int type = get_wifi_chip_type();
 
 #ifdef CONFIG_RTL8192CU
     count = sprintf(_buf, "%s", "RTL8188CU");
@@ -24,10 +27,12 @@ static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, c
     printk("Current WiFi chip is RTL8192DU.\n");
 #endif
 
+if(type == WIFI_RTL8188EU) {
 #ifdef CONFIG_RTL8188EU
     count = sprintf(_buf, "%s", "RTL8188EU");
     printk("Current WiFi chip is RTL8188EU.\n");
 #endif
+}
 
 #ifdef CONFIG_RTL8723AU
     count = sprintf(_buf, "%s", "RTL8723AU");
@@ -39,6 +44,7 @@ static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, c
     printk("Current WiFi chip is RTL8723BS.\n");
 #endif
 
+if(type == WIFI_RKWIFI) {
 #ifdef CONFIG_BCM4330
     count = sprintf(_buf, "%s", "BCM4330");
     printk("Current WiFi chip is BCM4330.\n");
@@ -98,6 +104,7 @@ static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, c
     count = sprintf(_buf, "%s", "RK903");
     printk("Current WiFi chip is GB86302I.\n");
 #endif
+}
 
 #ifdef CONFIG_MTK_COMBO
        count = sprintf(_buf, "%s", "MT6620");
@@ -124,10 +131,12 @@ static ssize_t wifi_chip_read(struct class *cls, struct class_attribute *attr, c
     printk("Current WiFi chip is MT7601.\n");
 #endif
 
+if(type == WIFI_ESP8089) {
 #ifdef CONFIG_ESP8089
     count = sprintf(_buf, "%s", "ESP8089");
     printk("Current WiFi chip is ESP8089.\n");
 #endif
+}
 
     return count;
 }
@@ -152,10 +161,60 @@ void rockchip_wifi_exit_module(void) {return;}
 #else
 extern int rockchip_wifi_init_module(void);
 extern void rockchip_wifi_exit_module(void);
+extern int rockchip_wifi_init_module_rkwifi(void);
+extern void rockchip_wifi_exit_module_rkwifi(void);
+extern int rockchip_wifi_init_module_rtl8188eu(void);
+extern void rockchip_wifi_exit_module_rtl8188eu(void);
+extern int rockchip_wifi_init_module_esp8089(void);
+extern void rockchip_wifi_exit_module_esp8089(void);
 #endif
 static struct semaphore driver_sem;
 static int wifi_driver_insmod = 0;
 
+static int wifi_init_exit_module(int enable)
+{
+    int ret = 0;
+    int type = get_wifi_chip_type();
+#ifdef CONFIG_RKWIFI
+    if (type == WIFI_RKWIFI) {
+        if (enable > 0)
+            ret = rockchip_wifi_init_module_rkwifi();
+        else
+            rockchip_wifi_exit_module_rkwifi();
+        return ret;
+    }
+#endif
+#ifdef CONFIG_RTL8188EU
+    if (type == WIFI_RTL8188EU) {
+        if (enable > 0) 
+            ret = rockchip_wifi_init_module_rtl8188eu();
+        else
+            rockchip_wifi_exit_module_rtl8188eu();
+        return ret;
+    }
+#endif
+#ifdef CONFIG_ESP8089
+    if (type == WIFI_ESP8089) {
+        if (enable > 0)  
+            ret = rockchip_wifi_init_module_esp8089();
+        else
+            rockchip_wifi_exit_module_esp8089();
+        return ret;
+    }
+#endif
+
+#if !defined(CONFIG_RKWIFI) && !defined(CONFIG_RTL8188EU) && !defined(CONFIG_ESP8089)
+    {
+        if (enable > 0)
+            ret = rockchip_wifi_init_module();
+        else
+            rockchip_wifi_exit_module();
+    }
+#endif
+
+    return ret;
+}
+
 static ssize_t wifi_driver_write(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count)
 {
     int enable = 0, ret = 0;
@@ -169,11 +228,11 @@ static ssize_t wifi_driver_write(struct class *cls, struct class_attribute *attr
         return _count;
     }
     if(enable > 0) {
-        ret = rockchip_wifi_init_module();
+        ret = wifi_init_exit_module(enable);
         if (ret >= 0)
             wifi_driver_insmod = enable;
     } else {
-        rockchip_wifi_exit_module();
+        wifi_init_exit_module(enable);
         wifi_driver_insmod = enable;
     }   
 
index 93a81a037003db0f95b0007dd20c006ed8379f2c..22ccd6d645a6273a7ecdbde803e0993c0b29febd 100755 (executable)
@@ -40,6 +40,12 @@ struct rksdmmc_gpio_wifi_moudle {
     struct rksdmmc_gpio   GPS_LAN;  //pin33--GPS_LAN
 };
 
+enum {
+    WIFI_RKWIFI,
+    WIFI_RTL8188EU,
+    WIFI_ESP8089
+};
+
 int rfkill_get_wifi_power_state(int *power, int *vref_ctrl_enable);
 void *rockchip_mem_prealloc(int section, unsigned long size);
 int rockchip_wifi_ref_voltage(int on);
index e7ad8943f7161bc891fe7f95513948304763a257..7ee0790470485dd0dcc43e0b5bb614cfd5c6b3d2 100755 (executable)
@@ -91,6 +91,23 @@ static const char wlan_name[] =
 #endif
 ;
 
+static char wifi_chip_type_string[64];
+int get_wifi_chip_type(void)
+{
+    int type;
+    if (strcmp(wifi_chip_type_string, "rkwifi") == 0) {
+        type = WIFI_RKWIFI;
+    } else if (strcmp(wifi_chip_type_string, "rtl8188eu") == 0) {
+        type = WIFI_RTL8188EU;
+    } else if (strcmp(wifi_chip_type_string, "esp8089") == 0) {
+        type = WIFI_ESP8089;
+    } else {
+        type = WIFI_RKWIFI;
+    }
+    return type;
+}
+EXPORT_SYMBOL(get_wifi_chip_type);
+
 /***********************************************************
  * 
  * Broadcom Wifi Static Memory
@@ -600,6 +617,14 @@ static int wlan_platdata_parse_dt(struct device *dev,
 
     memset(data, 0, sizeof(*data));
 
+    ret = of_property_read_string(node, "wifi_chip_type", &strings);
+    if (ret) {
+        printk("%s: Can not read wifi_chip_type, set default to rkwifi.\n", __func__);
+        strcpy(wifi_chip_type_string, "rkwifi");
+    }
+    strcpy(wifi_chip_type_string, strings);
+    printk("%s: wifi_chip_type = %s\n", __func__, wifi_chip_type_string);
+
        if(cpu_is_rk3036()){
                /* ret = of_property_read_u32(node, "sdio_vref", &value);
                if (ret < 0) {