Platform: ROCKCHIP
Chip: RK3399
OS: Android7.1.2
Kernel: 4.4.126
背景
硬件替换芯片rtl8822cs;未改代码情况下,WIFI:点pown on立即跳到off
bt:点on 无反应,串口打印
[ 875.649281] ret = 0
[ 875.704811] [BT_RFKILL]: bt shut off power
[ 875.726554] [BT_RFKILL]: rfkill_rk_set_power: set bt wake_host high!
[ 875.771901] [BT_RFKILL]: ENABLE UART_RTS
[ 875.875559] [BT_RFKILL]: DISABLE UART_RTS
[ 875.875683] [BT_RFKILL]: bt turn on power
[ 875.875708] [BT_RFKILL]: Request irq for bt wakeup host
[ 875.875748] [BT_RFKILL]: ** disable irq
代码改动
1.修改WIFI配置的dtsi:
wireless-wlan {
compatible = "wlan-platdata";
rockchip,grf = <&grf>;
wifi_chip_type = "rtl8822cs";
sdio_vref = <1800>;
WIFI,host_wake_irq = <&gpio0 3 GPIO_ACTIVE_HIGH>; /* GPIO0_a3 */
status = "okay";
};
2.2.添加驱动
将供应商提供的驱动放在目录:kernel\drivers\net\wireless\rockchip_wlan
修改当前目录下makefile:
obj-$(CONFIG_RTL8822CS) += rtl8822cs/
修改kconfig:
source "drivers/net/wireless/rockchip_wlan/rtl8822cs/Kconfig"
修改rtl8822cs/makefile:
CONFIG_PLATFORM_I386_PC=n
CONFIG_PLATFORM_ARM_RK3188=y
make ARCH=arm64 menuconfig 添加勾选
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
[*] Rockchip Wireless LAN support --->
<M> Realtek 8822C SDIO WiFi
3.添加芯片类型枚举:
kernel/net/rfkill/rfkill-wlan.c
在int get_wifi_chip_type