void mmc_rescan(struct work_struct *work)
{//先获取host控制器
struct mmc_host *host =
container_of(work, struct mmc_host, detect.work);
int i;
//这里变量trigger_card_event 在检测sd卡的中断函数内设置为true,就是说如果是因为发生的中断而触发检测的就先调用mmc总线的ops来检测mmc卡是否还存在,此时并不知道是mmc卡还是sd卡,只是检测状态比如gpio pin的高低来初步判断
if (host->trigger_card_event && host->ops->card_event) {
host->ops->card_event(host);
host->trigger_card_event = false;
}
//触发检测mmc卡的方式有两种,一种是通过中断方式的,一种是主动调用方式,如果在mmc host还没初始化完就触发了中断肯定是有问题的,所以这里设置一个参数rescan_disable来防止。
if (host->rescan_disable)
return;
/* If there is a non-removable card registered, only scan once */
if ((host->caps & MMC_CAP_NONREMOVABLE) && host->rescan_entered)
ret