写在前面

公司使用px30 + rtl8723du驱动来使能蓝牙和wifi功能,目前蓝牙需要厂家提供固件,调通再更新。记录一下wifi移植的时候一个奇怪的现象:rtl8723du wifi 断电重启正常,但是reboot软重启,wifi不正常。具体表现为ifconfig 看不到wlan的信息,使用ifconfig wlan0 up 显示 找不到节点,将调试构成记录一下。

wifi驱动涉及代码

目录内容
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd系统接口
net/rfkill/rfkill-wlan.c设备驱动
drivers/net/wireless/rockchip_wlan/rtl8723du厂家驱动

wifi驱动设备树修改

wireless-wlan {
    compatible = "wlan-platdata";//和rfkill-wlan.c电源驱动匹配
    wifi_chip_type = "8723du";//用它来判断使用哪个硬件模块,加载对应的wifi驱动,配置。
    keep_wifi_power_on;//打开后表示开机过程后就直接上电,并且一直保持上电状态,后续的电源操作会失效。
                       //有些WiFi模组可能是WiFi和BT共用电源,这时需要一直保持上电状态
    WIFI,poweren_gpio = <&gpio1 RK_PC0 GPIO_ACTIVE_HIGH>; //电源口,有复位功能
    status = "okay";
};

wifi驱动修改px30_linux_defconfig

CONFIG_RTL8723DU=y

wifi驱动修改Kconfig

vi drivers/net/wireless/rockchip_wlan/Kconfig
source "drivers/net/wireless/rockchip_wlan/rtl8723du/Kconfig"

wifi驱动修改Makefile

vi drivers/net/wireless/rockchip_wlan/Makefile
obj-$(CONFIG_RTL8723DU) += rtl8723du/

wifi驱动遇到问题

第一次烧写之后 ,重启识别不到wifi设备,多次测试发现,断电重启,wifi正常,但是reboot重启,wifi就不能正常,具体表现为ifconfig 看不到wlan的信息,怀疑有时候这个驱动的引脚拉高拉低的 操作有点问题,复位一下WIFI_PWR_EN_H 这个引脚,目前有两种解决方法

1 内核里面就是给这个函数加一下延时

int rockchip_wifi_power(int on)
{
	struct rfkill_wlan_data *mrfkill = g_rfkill;
    struct rksdmmc_gpio *poweron, *reset;
    struct regulator *ldo = NULL;
    int power = 0;
    bool toggle = false;
    //txr 20220421 okay
    msleep(100);
    LOG("%s: %d\n", __func__, on);

	if (!on && primary_sdio_host)
		mmc_pwrseq_power_off(primary_sdio_host);

    if (mrfkill == NULL) {
        LOG("%s: rfkill-wlan driver has not Successful initialized\n", __func__);
        return -1;
    }

2 在启动脚本里手动重启

vi /etc/init/rcS
#在脚本末尾加一下就行 0xFF250000  这个得是原理图电源叫对应的寄存器地址
io -4 -w 0xFF250000 0x00010000
io -4 -w 0xFF250000 0x00000000
io -4 -w 0xFF250000 0x00010000
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐