谁能解释一下rk3288的wifi驱动工作流程?
本帖最后由 pqy 于 2015-11-4 16:21 编辑我先说说自己的理解:
首先用户往/sys/class/rkwifi/driver写入1,会触发wifi_init_exit_module()函数,这个函数又触发rockchip_wifi_init_module_rkwifi()函数,接着dhd_module_init(),这应该是关键函数了。函数里用了两个semaphore dhd_chipup_sem,dhd_registration_sem分别实现wifi上电和设备注册。dhd_chipup_sem通过好几个函数传递给了sdio_func_reg_notify(),但是这个函数仅仅是对其up了一下,static struct semaphore *notify_semaphore = NULL;
int sdio_func_reg_notify(void* semaphore)
{
notify_semaphore = semaphore;
if (notify_semaphore)
up(notify_semaphore);
return 0;
//return sdio_register_driver(&dummy_sdmmc_driver);
}
notify_semaphore是static的,文件其他地方再没用到。
问题1:这么做有什么意义?up了之后,接下来的down_timeout(&dhd_chipup_sem,msecs_to_jiffies(POWERUP_WAIT_MS)) == 0不是一定成立了吗?这部分检测上电是否成功的代码不是多余的吗?
接下来到了设备注册,由dhd_bus_register()开始,这个函数将dhdsdio的probe和disconnect函数传递给bcmsdh_register(),bcmsdh_register()接到参数后,注册sdio驱动。
我的问题是,bcmsdh_sdmmc_probe()函数是怎么触发的?
页:
[1]