From f17795c900b322a664bdfc4f537f2f0905990240 Mon Sep 17 00:00:00 2001 From: hwg Date: Wed, 13 Aug 2014 15:11:50 +0800 Subject: [PATCH] wifi: build together with rkwifi, esp8089, rtl8188eu driver, avoid config change --- arch/arm/boot/dts/rk3288-tb_8846.dts | 5 +- arch/arm/configs/rockchip_defconfig | 2 + drivers/net/wireless/Kconfig | 52 +++++++-------- .../rockchip_wlan/esp8089/sdio_stub.c | 8 +-- .../rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c | 8 +-- .../rtl8188eu/os_dep/linux/usb_intf.c | 8 +-- .../rockchip_wlan/wifi_sys/rkwifi_sys_iface.c | 63 ++++++++++++++++++- include/linux/rfkill-wlan.h | 6 ++ net/rfkill/rfkill-wlan.c | 25 ++++++++ 9 files changed, 132 insertions(+), 45 deletions(-) diff --git a/arch/arm/boot/dts/rk3288-tb_8846.dts b/arch/arm/boot/dts/rk3288-tb_8846.dts index 70cf2835c9d2..aee15d67da0f 100644 --- a/arch/arm/boot/dts/rk3288-tb_8846.dts +++ b/arch/arm/boot/dts/rk3288-tb_8846.dts @@ -11,7 +11,10 @@ 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; diff --git a/arch/arm/configs/rockchip_defconfig b/arch/arm/configs/rockchip_defconfig index 647b99f91b6b..eaa12eed396a 100644 --- a/arch/arm/configs/rockchip_defconfig +++ b/arch/arm/configs/rockchip_defconfig @@ -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 diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index 0cfaa2afdff3..3fabd90ba02f 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig @@ -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 diff --git a/drivers/net/wireless/rockchip_wlan/esp8089/sdio_stub.c b/drivers/net/wireless/rockchip_wlan/esp8089/sdio_stub.c index 4712559b47ac..f097570115b7 100755 --- a/drivers/net/wireless/rockchip_wlan/esp8089/sdio_stub.c +++ b/drivers/net/wireless/rockchip_wlan/esp8089/sdio_stub.c @@ -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); diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c index 0e35b1763674..be3fd04339c8 100755 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c @@ -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); /* diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c index 9f08c3bd7e41..514326b538a6 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c @@ -1942,7 +1942,7 @@ static void rtw_drv_halt(void) #include "wifi_version.h" #include -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); diff --git a/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c b/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c index db059579ed9f..c3a0347b0354 100755 --- a/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c +++ b/drivers/net/wireless/rockchip_wlan/wifi_sys/rkwifi_sys_iface.c @@ -10,9 +10,12 @@ #include #include +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; } diff --git a/include/linux/rfkill-wlan.h b/include/linux/rfkill-wlan.h index 93a81a037003..22ccd6d645a6 100755 --- a/include/linux/rfkill-wlan.h +++ b/include/linux/rfkill-wlan.h @@ -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); diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index e7ad8943f716..7ee079047048 100755 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -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) { -- 2.34.1