公司最近新项目使用三选二卡槽,卡槽上只预留有一个GPIO,它是怎么区分主、副卡和SD的呢,一直很疑惑,驱动上屏蔽掉SDGPIO检测的机制后,发现SD的检测是正常的,此时,真是丈二的和尚摸不着头脑了。
最近,花了点时间,看了遍SD底层驱动,发现了一点有用的东西,希望能够帮助到大家。如有错误,请批评指正。
以前,单独SD卡的时候,是用单独的GPIO来检测SD的插入&拔出。 pdata->status_gpio = of_get_named_gpio_flags(np, "cd-gpios", 0, &flags);
现在,手机行业流行使用三选二卡槽,高通在比较新的平台 为适应这种主流修改了检测方式,来使用三选二卡槽。
新平台中在兼容以前GPIO检测的方式外,又添加了轮询机制来检测SD以可以使用三选二卡槽。
if (!gpio_is_valid(msm_host->pdata->status_gpio)) {
msm_host->polling.show = show_polling;
msm_host->polling.store = store_polling;
sysfs_attr_init(&msm_host->polling.attr);
msm_host->polling.attr.name = "polling";
msm_host->polling.attr.mode = S_IRUGO | S_IWUSR;
re