Firefly开源社区

打印 上一主题 下一主题

谁能解释一下rk3288的wifi驱动工作流程?

273

积分

0

威望

0

贡献

技术达人

Rank: 2

积分
273

谁能解释一下rk3288的wifi驱动工作流程?

发表于 2015-11-4 16:19:55      浏览:8540 | 回复:0        打印      只看该作者   [复制链接] 楼主
本帖最后由 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()函数是怎么触发的?



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表