diff --git a/linux_5.10/drivers/net/wireless/Kconfig b/linux_5.10/drivers/net/wireless/Kconfig index 5f84d6d0c..e71e5dde3 100644 --- a/linux_5.10/drivers/net/wireless/Kconfig +++ b/linux_5.10/drivers/net/wireless/Kconfig @@ -49,6 +49,7 @@ source "drivers/net/wireless/ti/Kconfig" source "drivers/net/wireless/zydas/Kconfig" source "drivers/net/wireless/quantenna/Kconfig" source "drivers/net/wireless/icommsemi/Kconfig" +source "drivers/net/wireless/aicsemi/Kconfig" config PCMCIA_RAYCS tristate "Aviator/Raytheon 2.4GHz wireless support" diff --git a/linux_5.10/drivers/net/wireless/Makefile b/linux_5.10/drivers/net/wireless/Makefile index 1c4537d62..d3f05b391 100644 --- a/linux_5.10/drivers/net/wireless/Makefile +++ b/linux_5.10/drivers/net/wireless/Makefile @@ -21,6 +21,7 @@ obj-$(CONFIG_WLAN_VENDOR_TI) += ti/ obj-$(CONFIG_WLAN_VENDOR_ZYDAS) += zydas/ obj-$(CONFIG_WLAN_VENDOR_QUANTENNA) += quantenna/ obj-$(CONFIG_WLAN_VENDOR_ICOMMSEMI) += icommsemi/ +obj-$(CONFIG_WLAN_VENDOR_AICSEMI) += aicsemi/ # 16-bit wireless PCMCIA client drivers obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o diff --git a/linux_5.10/drivers/net/wireless/aicsemi/Kconfig b/linux_5.10/drivers/net/wireless/aicsemi/Kconfig new file mode 100644 index 000000000..77c8a74ed --- /dev/null +++ b/linux_5.10/drivers/net/wireless/aicsemi/Kconfig @@ -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 diff --git a/linux_5.10/drivers/net/wireless/aicsemi/Makefile b/linux_5.10/drivers/net/wireless/aicsemi/Makefile new file mode 100644 index 000000000..20cdb445d --- /dev/null +++ b/linux_5.10/drivers/net/wireless/aicsemi/Makefile @@ -0,0 +1,6 @@ +# +# Makefile for the Linux Wireless network device drivers for AICSEMI units +# + +obj-$(CONFIG_AIC8800) += aic8800/ + diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Kconfig b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Kconfig index 66c20f6d8..08af5824f 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Kconfig +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Kconfig @@ -1,18 +1,18 @@ -config AIC_WLAN_SUPPORT +config AIC8800 bool "AIC wireless Support" default n help This is support for aic wireless chip. config AIC_FW_PATH - depends on AIC_WLAN_SUPPORT + depends on AIC8800 string "Firmware & config file path" default "/vendor/etc/firmware" #default "/lib/firmware/aic8800_sdio" help Path to the firmware & config file. -if AIC_WLAN_SUPPORT -source "drivers/net/wireless/aic8800/aic8800_fdrv/Kconfig" -source "drivers/net/wireless/aic8800/aic8800_btlpm/Kconfig" +if AIC8800 +source "drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Kconfig" +source "drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Kconfig" endif diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Makefile b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Makefile index cac155948..87bf293f2 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Makefile +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/Makefile @@ -1,10 +1,10 @@ CONFIG_AIC8800_BTLPM_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_WLAN_SUPPORT) += aic8800_fdrv/ -obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800_bsp/ +obj-$(CONFIG_AIC8800) += aic8800_bsp/ MAKEFLAGS +=-j$(shell nproc) @@ -22,7 +22,8 @@ export CONFIG_PLATFORM_ROCKCHIP = n export CONFIG_PLATFORM_ROCKCHIP2 = n export CONFIG_PLATFORM_ALLWINNER = 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) ARCH = arm64 @@ -66,6 +67,11 @@ CROSS_COMPILE ?= endif ########################################### +ifeq ($(CONFIG_PLATFORM_CVITEK), y) +$(info ARCH: $(ARCH)) +$(info CROSS_COMPILE: $(CROSS_COMPILE)) +endif + all: modules modules: make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/Makefile b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/Makefile index bcccfbdbb..fdde9e63b 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/Makefile +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/Makefile @@ -70,7 +70,8 @@ CONFIG_PLATFORM_ROCKCHIP2 ?= n CONFIG_PLATFORM_ALLWINNER ?=n CONFIG_PLATFORM_INGENIC_T20 ?= n CONFIG_PLATFORM_AMLOGIC ?= n -CONFIG_PLATFORM_UBUNTU ?= y +CONFIG_PLATFORM_UBUNTU ?= n +CONFIG_PLATFORM_CVITEK ?= y ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ccflags-$(CONFIG_PLATFORM_ROCKCHIP) += -DCONFIG_PLATFORM_ROCKCHIP @@ -116,6 +117,12 @@ MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net/wireless/ ARCH ?= x86_64 CROSS_COMPILE ?= endif + +ifeq ($(CONFIG_PLATFORM_CVITEK), y) +$(info ARCH: $(ARCH)) +$(info CROSS_COMPILE: $(CROSS_COMPILE)) +ccflags-$(CONFIG_PLATFORM_CVITEK) += -DCONFIG_PLATFORM_CVITEK +endif ########################################### all: modules diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/aicsdio.c b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/aicsdio.c index 4a9707c03..3f67722db 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/aicsdio.c +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_bsp/aicsdio.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "aicsdio_txrxif.h" #include "aicsdio.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); #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 void aicbsp_platform_power_off(void); @@ -492,6 +498,28 @@ static int aicbsp_platform_power_on(void) rockchip_wifi_set_carddetect(1); #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); ret = aicbsp_reg_sdio_notify(&aic_chipup_sem); if (ret) { @@ -507,6 +535,12 @@ static int aicbsp_platform_power_on(void) sunxi_mmc_rescan_card(aicbsp_bus_index); #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) { aicbsp_unreg_sdio_notify(); if(aicbsp_load_fw_in_fdrv){ @@ -530,6 +564,15 @@ static int aicbsp_platform_power_on(void) rockchip_wifi_power(0); #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; } @@ -558,6 +601,14 @@ static void aicbsp_platform_power_off(void) extern_wifi_set_enable(0); #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__); } diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Makefile b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Makefile index 6d59301f9..1672cad43 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Makefile +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_btlpm/Makefile @@ -9,8 +9,8 @@ CONFIG_PLATFORM_ROCKCHIP ?= n CONFIG_PLATFORM_ROCKCHIP2 ?= n CONFIG_PLATFORM_ALLWINNER ?= n CONFIG_PLATFORM_AMLOGIC ?= n -CONFIG_PLATFORM_UBUNTU ?= y - +CONFIG_PLATFORM_UBUNTU ?= n +CONFIG_PLATFORM_CVITEK ?= y CONFIG_SUPPORT_LPM ?= n CONFIG_AUTO_PM ?= n @@ -63,6 +63,10 @@ ARCH ?= x86_64 CROSS_COMPILE ?= endif +ifeq ($(CONFIG_PLATFORM_CVITEK), y) +$(info ARCH: $(ARCH)) +$(info CROSS_COMPILE: $(CROSS_COMPILE)) +endif all: modules modules: diff --git a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Makefile b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Makefile index 8c10df7e1..e38c88796 100644 --- a/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Makefile +++ b/linux_5.10/drivers/net/wireless/aicsemi/aic8800/aic8800_fdrv/Makefile @@ -311,7 +311,8 @@ CONFIG_PLATFORM_ROCKCHIP2 ?= n CONFIG_PLATFORM_ALLWINNER ?= n CONFIG_PLATFORM_INGENIC_T20 ?= n CONFIG_PLATFORM_AMLOGIC ?= n -CONFIG_PLATFORM_UBUNTU ?= y +CONFIG_PLATFORM_UBUNTU ?= n +CONFIG_PLATFORM_CVITEK ?= y ifeq ($(CONFIG_PLATFORM_ROCKCHIP), y) ARCH := arm64 @@ -358,8 +359,12 @@ MODDESTDIR ?= /lib/modules/$(KVER)/kernel/drivers/net/wireless/ ARCH ?= x86_64 CROSS_COMPILE ?= endif -########################################### +ifeq ($(CONFIG_PLATFORM_CVITEK), y) +$(info ARCH: $(ARCH)) +$(info CROSS_COMPILE: $(CROSS_COMPILE)) +endif +########################################### all: modules modules: