Firefly开源社区

标题: 谁能解释一下rk3288的wifi驱动工作流程? [打印本页]

作者: pqy    时间: 2015-11-4 16:19
标题: 谁能解释一下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了一下,
  1. static struct semaphore *notify_semaphore = NULL;
  2. int sdio_func_reg_notify(void* semaphore)
  3. {
  4.         notify_semaphore = semaphore;
  5.         if (notify_semaphore)
  6.                 up(notify_semaphore);
  7.         return 0;       
  8.         //return sdio_register_driver(&dummy_sdmmc_driver);
  9. }
复制代码


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()函数是怎么触发的?








欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1