WIFI 驱动

场景需求:通过瑞芯微官方文档,知道rk3568 wifi支持 SDIO方式和PCIE方式。目前市面上使用SDIO方式居多。

型号选用区分:
ap6275s 以s结尾的代表用SDIO通信
ap6275P 以P结尾代表使用PCIE通信

PCIE驱动适配

这里使用的是 rk3568 minipcie 方式,走的pcie 2x1.
wifi模块正常工作以下引脚必须正确配置
仅供参考,具体需结合原理图对应配置

名称 使用
pcie 供电 0 RK_PC6
wifi 供电控制 3 RK_PC4
wifi reg on 4 RK_PC4

说明:需要保证wifi模块 上链供电正常,reg 是控制wifi 的开关引脚,如果常开可以一直置高。

以下配置能实现是通过检测wifi供电控制引脚,控制wifi 开关引脚,从而达到软件实现开关。如果不需要控制可以常置高。

模块未采用host_wake,单纯仅使能wifi,蓝牙也不走,故这些都可以不用配置

设备树配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
	vcc3v3_pcie_wifi: gpio-regulator {
compatible = "regulator-gpio";
regulator-name = "vcc3v3_pcie_wifi";
regulator-min-microvolt = <100000>;
regulator-max-microvolt = <3300000>;
gpios = <&gpio0 RK_PC6 GPIO_ACTIVE_HIGH>;
gpios-states = <0x1>;
states = <100000 0x0
3300000 0x1>;
};

&pcie2x1 {
reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
vpcie3v3-supply = <&vcc3v3_pcie_wifi>;
status = "okay";
};

wireless_wlan: wireless-wlan {
compatible = "wlan-platdata";
wifi_chip_type = "ap6275p";
pinctrl-names = "default";
status = "disabled";
};

&combphy0_us {
status = "okay";
};

&combphy1_usq {
status = "okay";
};
# 目前是使用这个 pcie2 的phy节点
&combphy2_psq {
status = "okay";
};

&csi2_dphy_hw {
status = "okay";
};

/*************WIFI 电源控制 **************/
gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&wifi_key>;
gpios = <&gpio3 RK_PC4 GPIO_ACTIVE_LOW>;
label = "GPIO Key WIFI";
debounce-interval = <100>;
};
wifi-gpio-keys {
compatible = "gpio-keys";
pinctrl-names = "default";
pinctrl-0 = <&wifi_reg_key>;
gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
label = "WIFI REG ON";
debounce-interval = <100>;
};
# 这里增加一个 wifi硬件开关控制,reg 引脚也让其能控制
&pinctrl {

wifi{
wifi_key: wifi-key {
rockchip,pins = <3 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>;
};
wifi_reg_key: wifi-reg-key {
rockchip,pins = <4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>;
};
};

};

内核驱动

驱动代码路径:drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd

需要保证该路径代码能够完成编译。

注意 Makefile 文件配置选项开关

wifi驱动代码支持三种工作方式,分别是usb、sdio、pcie。分别互斥,这里需要查看CONFIG_BCMDHD_PCIE 是否使能,并且需要开启pcie 依赖的使能项。查看对应的Kconfig,把需要的使能项都打开。

瑞芯微提供统一配置的deconfig文件

1
2
3
4
5
6
# 仅供参考
CONFIG_WIFI_BUILD_MODULE=y
CONFIG_BCMDHD=y
CONFIG_AP6XXX=y
CONFIG_BCMDHD_PCIE=y
CONFIG_BCMDHD_SDIO=n

驱动程序

内核完成对wifi 驱动支持后,rootfs还需要安装瑞芯微适配后的驱动程序文件。

驱动程序放在 sdk中 external/rkwifibt/firmware/broadcom/AP6275P 路径下

1
2
3
4
5
6
clm_bcm43752a2_pcie_ag.blob
fw_bcm43752a2_pcie_ag_apsta.bin
fw_bcm43752a2_pcie_ag.bin
fw_bcm43752a2_pcie_ag_mfg.bin
nvram_AP6275P.txt

这些文件需要拷贝到rootfs镜像 /vendor/etc/firmware/ 目录下,如果该目录没有上述文件的话。

ath 驱动适配
firmware-atheros 安装
wget http://ftp.de.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-atheros_20210315-3_all.deb