分类: LINUX
2017-08-17 00:30:40
mmc host驱动的核心的数据结构是struct mmc_host,而对具体的mmc host驱动,是要实现host相关的操作函数集struct mmc_host_ops,比如卡的检测,写保护,发送命令请求等,然后创建一个mmc_host并添加进系统,对于接口如下:
drivers/mmc/core/host.c:
mmc_alloc_host/mmc_free_host
mmc_add_host/mmc_remove_host
mmc_alloc_host函数比较简单,创建一个mmc_host并做初始化:
其中初始化了一个work节点,mmc_rescan这个函数比较重要,用来做卡的检测。
mmc_add_host向系统添加一个mmc_host:
mmc_start_host会调用_mmc_detect_change:
向work_queue提交一个work来检测卡,具体的检测函数就是前面的mmc_rescan:
如果设置了MMC_CAP_NONREMOVABLE,表示host不支持热插拔卡,否则调用mmc_host_ops的get_cd检查是否有卡,如果有卡,则调用mmc_rescan_try_freq继续探测:
按照设备是否支持相应协议命令来区分sdio设备,SD卡和MMC卡。
如果是SD卡,调用mmc_sd_init_card创建sd卡设备对象
如果是MMC卡,调用mmc_init_card创建mmc卡设备对象
然后调用mmc_add_card将卡设备添加进系统