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