CPU:RK3288git
系統:Android 5.1less
注:系統中自帶的模塊沒有AP6212,相近的只有AP6210,設置爲AP6210,直接添加固件也能夠正常使用。spa
此文是手動添加AP6212的例程。調試
一、在設備樹中修改 wifi 芯片爲 ap6212,code
kernel/arch/arm/boot/dts/rk3288-tb_8846.dtsblog
diff --git a/kernel/arch/arm/boot/dts/rk3288-tb_8846.dts b/kernel/arch/arm/boot/dts/rk3288-tb_8846.dts index 6a65163..aa5480d 100755 --- a/kernel/arch/arm/boot/dts/rk3288-tb_8846.dts +++ b/kernel/arch/arm/boot/dts/rk3288-tb_8846.dts @@ -42,7 +42,7 @@ * rtl8188eu, rtl8723bs, rtl8723bu * esp8089 */ - wifi_chip_type = "ap6330"; + wifi_chip_type = "ap6212"; sdio_vref = <1800>; //1800mv or 3300mv
二、在 Kconfig 文件中增長 AP6212 選項。ip
/kernel/drivers/net/wireless/Kconfigget
diff --git a/kernel/drivers/net/wireless/Kconfig b/kernel/drivers/net/wireless/Kconfig index 544aa86..3e1026d 100755 --- a/kernel/drivers/net/wireless/Kconfig +++ b/kernel/drivers/net/wireless/Kconfig @@ -84,6 +84,10 @@ choice config AP6210 bool "AP6210" depends on RKWIFI + + config AP6212 + bool "AP6212" + depends on RKWIFI config AP6234 bool "AP6234"
三、在配置文件 rockchip_defconfig 中屏蔽舊 wifi 芯片,增長新的 wifi 芯片cmd
kernel/arch/arm/configs/rockchip_defconfigit
diff --git a/kernel/arch/arm/configs/rockchip_defconfig b/kernel/arch/arm/configs/rockchip_defconfig index e7c697a..5199ec0 100755 --- a/kernel/arch/arm/configs/rockchip_defconfig +++ b/kernel/arch/arm/configs/rockchip_defconfig @@ -299,7 +299,7 @@ CONFIG_USB_SIERRA_NET=y CONFIG_RTL8188EU=y CONFIG_ESP8089=y CONFIG_RKWIFI=y -CONFIG_AP6335=y +# CONFIG_AP6335 is not set +CONFIG_AP6212=y # CONFIG_INPUT_MOUSEDEV is not set CONFIG_INPUT_EVDEV=y CONFIG_INPUT_KEYRESET=y
四、此時串口打印中會出現打開文件 fw_bcm43438a1.bin 失敗,須要更新 wifi 模塊固件。
[ 18.686420] dhdsdio_download_code_file: Open firmware file failed /system/etc/firmware/fw_bcm43438a1.bin [ 18.686430] _dhdsdio_download_firmware: dongle image file download failed
WiFI 固件路徑:/external/wlan_loader/firmware
將模塊供應商提供的固件文件拷貝到此目錄下,而後編譯燒錄。
external/wlan_loader/firmware/fw_bcm43438a1.bin external/wlan_loader/firmware/fw_bcm43438a1_apsta.bin external/wlan_loader/firmware/fw_bcm43438a1_p2p.bin external/wlan_loader/firmware/nvram_ap6212.txt
編譯後,系統會將模塊固件拷貝到 out/target/product/rk3288/system/etc//firmware/ 目錄下
若是隻是調試,能夠經過 adb 將固件 push 到 /system/etc//firmware/ 目錄下,而後重啓。
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/rk_wifi_config.c
wifi 驅動路徑:kernel/net/rfkill/rfkill-wlan.c
若是器件升級,好比器件爲AP6212A,供應商給的文件問 nvram_ap6212a.txt,則須要修改下面文件。(直接用之前的 nvram_ap6212.txt 也能夠用,但文件不同,不清楚)
路徑:\kernel\drivers\net\wireless\rockchip_wlan\rkwifi\bcmdhd\dhd_config.c
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c index 39641e1..91d7925 100755 --- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c +++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c @@ -477,7 +477,7 @@ dhd_conf_set_fw_name_by_chip(dhd_pub_t *dhd, char *fw_path, char *nv_path) strcpy(&fw_path[i+1], bcm43438a0_fw_name[fw_type]); else if (chiprev == BCM43430A1_CHIP_REV) strcpy(&fw_path[i+1], bcm43438a1_fw_name[fw_type]); - strcpy(&nv_path[j+1], "nvram_ap6212.txt"); + strcpy(&nv_path[j+1], "nvram_ap6212a.txt");break; case BCM43340_CHIP_ID: if (chiprev == BCM43340B0_CHIP_REV)
五、BT 驅動中增添代碼,支持 AP6212
BT 驅動路徑:kernel/net/rfkill/rfkill-bt.c
diff --git a/kernel/net/rfkill/rfkill-bt.c b/kernel/net/rfkill/rfkill-bt.c index a1a156c..3070080 100755 --- a/kernel/net/rfkill/rfkill-bt.c +++ b/kernel/net/rfkill/rfkill-bt.c @@ -95,6 +95,8 @@ static const char bt_name[] = #else "ap6210_24M" #endif +#elif defined(CONFIG_AP6212) + "ap6212" #elif defined(CONFIG_AP6330) "ap6330" #elif defined(CONFIG_AP6476) @@ -266,7 +268,7 @@ static int rfkill_rk_set_power(void *data, bool blocked) struct rfkill_rk_data *rfkill = data; struct rfkill_rk_gpio *poweron = &rfkill->pdata->poweron_gpio; struct rfkill_rk_gpio *reset = &rfkill->pdata->reset_gpio; -#if defined(CONFIG_AP6210) || defined(CONFIG_AP6335) +#if defined(CONFIG_AP6210) || defined(CONFIG_AP6212) || defined(CONFIG_AP6335) struct rfkill_rk_gpio* rts = &rfkill->pdata->rts_gpio; struct pinctrl *pinctrl = rfkill->pdata->pinctrl; #endif @@ -307,7 +309,7 @@ static int rfkill_rk_set_power(void *data, bool blocked) msleep(20); gpio_direction_output(reset->io, reset->enable); } -#if defined(CONFIG_AP6210) || defined(CONFIG_AP6335) +#if defined(CONFIG_AP6210) || defined(CONFIG_AP6212) || defined(CONFIG_AP6335) if (pinctrl != NULL && gpio_is_valid(rts->io)) { pinctrl_select_state(pinctrl, rts->gpio_state);
到此 AP6212 就能夠正常使用了,可是不知道供應商提供的 BT 固件應該拷貝到哪裏。
BT 固件路徑:vendor/rockchip/common/bluetooth/lib/firmware
device/common/bluetooth/libbt/src/hardware.c