kernel: aic8800 wifi driver adapt to duos

Signed-off-by: carbon <carbon@milkv.io>
This commit is contained in:
carbon
2024-08-06 17:11:50 +08:00
parent 652259ff93
commit 527e5cd68e
10 changed files with 110 additions and 13 deletions

View File

@ -49,6 +49,7 @@ source "drivers/net/wireless/ti/Kconfig"
source "drivers/net/wireless/zydas/Kconfig" source "drivers/net/wireless/zydas/Kconfig"
source "drivers/net/wireless/quantenna/Kconfig" source "drivers/net/wireless/quantenna/Kconfig"
source "drivers/net/wireless/icommsemi/Kconfig" source "drivers/net/wireless/icommsemi/Kconfig"
source "drivers/net/wireless/aicsemi/Kconfig"
config PCMCIA_RAYCS config PCMCIA_RAYCS
tristate "Aviator/Raytheon 2.4GHz wireless support" tristate "Aviator/Raytheon 2.4GHz wireless support"

View File

@ -21,6 +21,7 @@ obj-$(CONFIG_WLAN_VENDOR_TI) += ti/
obj-$(CONFIG_WLAN_VENDOR_ZYDAS) += zydas/ obj-$(CONFIG_WLAN_VENDOR_ZYDAS) += zydas/
obj-$(CONFIG_WLAN_VENDOR_QUANTENNA) += quantenna/ obj-$(CONFIG_WLAN_VENDOR_QUANTENNA) += quantenna/
obj-$(CONFIG_WLAN_VENDOR_ICOMMSEMI) += icommsemi/ obj-$(CONFIG_WLAN_VENDOR_ICOMMSEMI) += icommsemi/
obj-$(CONFIG_WLAN_VENDOR_AICSEMI) += aicsemi/
# 16-bit wireless PCMCIA client drivers # 16-bit wireless PCMCIA client drivers
obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o

View File

@ -0,0 +1,16 @@
config WLAN_VENDOR_AICSEMI
bool "AICSEMI devices"
default n
help
If you have a wireless card belonging to this class, say Y.
Note that the answer to this question doesn't directly affect the
kernel: saying N will just cause the configurator to skip all the
questions about these cards. If you say Y, you will be asked for
your specific card in the following questions.
if WLAN_VENDOR_AICSEMI
source "drivers/net/wireless/aicsemi/aic8800/Kconfig"
endif # WLAN_VENDOR_AICSEMI

View File

@ -0,0 +1,6 @@
#
# Makefile for the Linux Wireless network device drivers for AICSEMI units
#
obj-$(CONFIG_AIC8800) += aic8800/

View File

@ -1,18 +1,18 @@
config AIC_WLAN_SUPPORT config AIC8800
bool "AIC wireless Support" bool "AIC wireless Support"
default n default n
help help
This is support for aic wireless chip. This is support for aic wireless chip.
config AIC_FW_PATH config AIC_FW_PATH
depends on AIC_WLAN_SUPPORT depends on AIC8800
string "Firmware & config file path" string "Firmware & config file path"
default "/vendor/etc/firmware" default "/vendor/etc/firmware"
#default "/lib/firmware/aic8800_sdio" #default "/lib/firmware/aic8800_sdio"
help help
Path to the firmware & config file. Path to the firmware & config file.
if AIC_WLAN_SUPPORT if AIC8800
source "drivers/net/wireless/aic8800/aic8800_fdrv/Kconfig" source "drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Kconfig"
source "drivers/net/wireless/aic8800/aic8800_btlpm/Kconfig" source "drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Kconfig"
endif endif

View File

@ -1,10 +1,10 @@
CONFIG_AIC8800_BTLPM_SUPPORT := m CONFIG_AIC8800_BTLPM_SUPPORT := m
CONFIG_AIC8800_WLAN_SUPPORT := m CONFIG_AIC8800_WLAN_SUPPORT := m
CONFIG_AIC_WLAN_SUPPORT := m CONFIG_AIC8800 := m
obj-$(CONFIG_AIC8800_BTLPM_SUPPORT) += aic8800_btlpm/ obj-$(CONFIG_AIC8800_BTLPM_SUPPORT) += aic8800_btlpm/
obj-$(CONFIG_AIC8800_WLAN_SUPPORT) += aic8800_fdrv/ obj-$(CONFIG_AIC8800_WLAN_SUPPORT) += aic8800_fdrv/
obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800_bsp/ obj-$(CONFIG_AIC8800) += aic8800_bsp/
MAKEFLAGS +=-j$(shell nproc) MAKEFLAGS +=-j$(shell nproc)
@ -22,7 +22,8 @@ export CONFIG_PLATFORM_ROCKCHIP = n
export CONFIG_PLATFORM_ROCKCHIP2 = n export CONFIG_PLATFORM_ROCKCHIP2 = n
export CONFIG_PLATFORM_ALLWINNER = n export CONFIG_PLATFORM_ALLWINNER = n
export CONFIG_PLATFORM_AMLOGIC = n export CONFIG_PLATFORM_AMLOGIC = n
export CONFIG_PLATFORM_UBUNTU = y export CONFIG_PLATFORM_UBUNTU = n
export CONFIG_PLATFORM_CVITEK = y
ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y)
ARCH = arm64 ARCH = arm64
@ -66,6 +67,11 @@ CROSS_COMPILE ?=
endif endif
########################################### ###########################################
ifeq ($(CONFIG_PLATFORM_CVITEK), y)
$(info ARCH: $(ARCH))
$(info CROSS_COMPILE: $(CROSS_COMPILE))
endif
all: modules all: modules
modules: modules:
make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules

View File

@ -70,7 +70,8 @@ CONFIG_PLATFORM_ROCKCHIP2 ?= n
CONFIG_PLATFORM_ALLWINNER ?=n CONFIG_PLATFORM_ALLWINNER ?=n
CONFIG_PLATFORM_INGENIC_T20 ?= n CONFIG_PLATFORM_INGENIC_T20 ?= n
CONFIG_PLATFORM_AMLOGIC ?= n CONFIG_PLATFORM_AMLOGIC ?= n
CONFIG_PLATFORM_UBUNTU ?= y CONFIG_PLATFORM_UBUNTU ?= n
CONFIG_PLATFORM_CVITEK ?= y
ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y)
ccflags-$(CONFIG_PLATFORM_ROCKCHIP) += -DCONFIG_PLATFORM_ROCKCHIP ccflags-$(CONFIG_PLATFORM_ROCKCHIP) += -DCONFIG_PLATFORM_ROCKCHIP
@ -116,6 +117,12 @@ MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net/wireless/
ARCH ?= x86_64 ARCH ?= x86_64
CROSS_COMPILE ?= CROSS_COMPILE ?=
endif endif
ifeq ($(CONFIG_PLATFORM_CVITEK), y)
$(info ARCH: $(ARCH))
$(info CROSS_COMPILE: $(CROSS_COMPILE))
ccflags-$(CONFIG_PLATFORM_CVITEK) += -DCONFIG_PLATFORM_CVITEK
endif
########################################### ###########################################
all: modules all: modules

View File

@ -15,6 +15,7 @@
#include <linux/semaphore.h> #include <linux/semaphore.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/gpio.h>
#include "aicsdio_txrxif.h" #include "aicsdio_txrxif.h"
#include "aicsdio.h" #include "aicsdio.h"
#include "aic_bsp_driver.h" #include "aic_bsp_driver.h"
@ -42,6 +43,11 @@ extern void extern_wifi_set_enable(int is_on);
extern void set_power_control_lock(int lock); extern void set_power_control_lock(int lock);
#endif//for AML #endif//for AML
#ifdef CONFIG_PLATFORM_CVITEK
extern int cvi_get_wifi_pwr_on_gpio(void);
extern int cvi_sdio_rescan(void);
static int cvi_wifi_power_gpio = -1;
#endif //CONFIG_PLATFORM_CVITEK
static int aicbsp_platform_power_on(void); static int aicbsp_platform_power_on(void);
static void aicbsp_platform_power_off(void); static void aicbsp_platform_power_off(void);
@ -492,6 +498,28 @@ static int aicbsp_platform_power_on(void)
rockchip_wifi_set_carddetect(1); rockchip_wifi_set_carddetect(1);
#endif /*CONFIG_PLATFORM_ROCKCHIP2*/ #endif /*CONFIG_PLATFORM_ROCKCHIP2*/
#ifdef CONFIG_PLATFORM_CVITEK
printk("======== CVITEK WLAN_POWER_ON ========\n");
cvi_wifi_power_gpio = cvi_get_wifi_pwr_on_gpio();
if (cvi_wifi_power_gpio >= 0) {
ret = gpio_request(cvi_wifi_power_gpio, "WLAN_POWER");
if (ret < 0) {
printk("%s: gpio_request(%d) for WLAN_POWER failed\n",
__func__, cvi_wifi_power_gpio);
cvi_wifi_power_gpio = -1;
}
}
if (cvi_wifi_power_gpio >= 0) {
ret = gpio_direction_output(cvi_wifi_power_gpio, 1);
if (ret) {
printk("%s: WLAN_POWER output high failed!\n", __func__);
return -EIO;
}
mdelay(50);
}
#endif //CONFIG_PLATFORM_CVITEK
sema_init(&aic_chipup_sem, 0); sema_init(&aic_chipup_sem, 0);
ret = aicbsp_reg_sdio_notify(&aic_chipup_sem); ret = aicbsp_reg_sdio_notify(&aic_chipup_sem);
if (ret) { if (ret) {
@ -507,6 +535,12 @@ static int aicbsp_platform_power_on(void)
sunxi_mmc_rescan_card(aicbsp_bus_index); sunxi_mmc_rescan_card(aicbsp_bus_index);
#endif //CONFIG_PLATFORM_ALLWINNER #endif //CONFIG_PLATFORM_ALLWINNER
#ifdef CONFIG_PLATFORM_CVITEK
printk("%s,%d: cvi_sdio_rescan\n", __func__, __LINE__);
cvi_sdio_rescan();
//udelay(1000);
#endif
if (down_timeout(&aic_chipup_sem, msecs_to_jiffies(2000)) == 0) { if (down_timeout(&aic_chipup_sem, msecs_to_jiffies(2000)) == 0) {
aicbsp_unreg_sdio_notify(); aicbsp_unreg_sdio_notify();
if(aicbsp_load_fw_in_fdrv){ if(aicbsp_load_fw_in_fdrv){
@ -530,6 +564,15 @@ static int aicbsp_platform_power_on(void)
rockchip_wifi_power(0); rockchip_wifi_power(0);
#endif /*CONFIG_PLATFORM_ROCKCHIP2*/ #endif /*CONFIG_PLATFORM_ROCKCHIP2*/
#ifdef CONFIG_PLATFORM_CVITEK
if (cvi_wifi_power_gpio >= 0) {
ret = gpio_direction_output(cvi_wifi_power_gpio, 0);
if (ret) {
printk("%s: WLAN_POWER output low failed!\n", __func__);
}
}
#endif //CONFIG_PLATFORM_CVITEK
return -1; return -1;
} }
@ -558,6 +601,14 @@ static void aicbsp_platform_power_off(void)
extern_wifi_set_enable(0); extern_wifi_set_enable(0);
#endif #endif
#ifdef CONFIG_PLATFORM_CVITEK
printk("======== CVITEK WLAN_POWER_OFF ========\n");
if (cvi_wifi_power_gpio >= 0) {
if(gpio_direction_output(cvi_wifi_power_gpio, 0)) {
printk("%s: WLAN_POWER output low failed!\n", __func__);
}
}
#endif //CONFIG_PLATFORM_CVITEK
sdio_dbg("%s\n", __func__); sdio_dbg("%s\n", __func__);
} }

View File

@ -9,8 +9,8 @@ CONFIG_PLATFORM_ROCKCHIP ?= n
CONFIG_PLATFORM_ROCKCHIP2 ?= n CONFIG_PLATFORM_ROCKCHIP2 ?= n
CONFIG_PLATFORM_ALLWINNER ?= n CONFIG_PLATFORM_ALLWINNER ?= n
CONFIG_PLATFORM_AMLOGIC ?= n CONFIG_PLATFORM_AMLOGIC ?= n
CONFIG_PLATFORM_UBUNTU ?= y CONFIG_PLATFORM_UBUNTU ?= n
CONFIG_PLATFORM_CVITEK ?= y
CONFIG_SUPPORT_LPM ?= n CONFIG_SUPPORT_LPM ?= n
CONFIG_AUTO_PM ?= n CONFIG_AUTO_PM ?= n
@ -63,6 +63,10 @@ ARCH ?= x86_64
CROSS_COMPILE ?= CROSS_COMPILE ?=
endif endif
ifeq ($(CONFIG_PLATFORM_CVITEK), y)
$(info ARCH: $(ARCH))
$(info CROSS_COMPILE: $(CROSS_COMPILE))
endif
all: modules all: modules
modules: modules:

View File

@ -311,7 +311,8 @@ CONFIG_PLATFORM_ROCKCHIP2 ?= n
CONFIG_PLATFORM_ALLWINNER ?= n CONFIG_PLATFORM_ALLWINNER ?= n
CONFIG_PLATFORM_INGENIC_T20 ?= n CONFIG_PLATFORM_INGENIC_T20 ?= n
CONFIG_PLATFORM_AMLOGIC ?= n CONFIG_PLATFORM_AMLOGIC ?= n
CONFIG_PLATFORM_UBUNTU ?= y CONFIG_PLATFORM_UBUNTU ?= n
CONFIG_PLATFORM_CVITEK ?= y
ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y)
ARCH := arm64 ARCH := arm64
@ -358,8 +359,12 @@ MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net/wireless/
ARCH ?= x86_64 ARCH ?= x86_64
CROSS_COMPILE ?= CROSS_COMPILE ?=
endif endif
###########################################
ifeq ($(CONFIG_PLATFORM_CVITEK), y)
$(info ARCH: $(ARCH))
$(info CROSS_COMPILE: $(CROSS_COMPILE))
endif
###########################################
all: modules all: modules
modules: modules: