1374行,由mmc_host取得s3cmci_host。
1375行,取得s3c24xx_mci_pdata,其它保存著SDI的平臺數(shù)據(jù)。
1378行,如果s3c24xx_mci_pdata.no_wprotect為1,表明沒有寫保護開關(guān),直接退出。例如MMC卡就沒有寫保護開關(guān),只有SD卡才有寫保護開關(guān)。
1381行,讀取gpio_wprotect引腳電平,對于Mini2440,即GPH8引腳。
1382行,與pdata->wprotect_invert執(zhí)行異或操作,即反轉(zhuǎn)上步得到GPH8引腳電平值。
s3cmci_card_present函數(shù)定義在drivers/mmc/host/s3cmci.c文件中:
1256行,由mmc_host取得s3cmci_host。
1257行,取得s3c24xx_mci_pdata,其它保存著SDI的平臺數(shù)據(jù)。
1260行,如果s3c24xx_mci_pdata.no_detect為1,表明沒有卡探測引腳,直接退出。
1263行,讀取gpio_detect引腳電平值,對于Mini2440,即GPG8引腳。
1264行,與pdata->detect_invert進行異或操作,即反轉(zhuǎn)上步得到的GPG8引腳電平值。
s3cmci_enable_sdio_irq函數(shù)定義在drivers/mmc/host/s3cmci.c文件中:
1389行,由mmc_host取得s3cmci_host。
1395行,讀取SDICON即SDI控制寄存器的內(nèi)容,保存在con中。
1396行,我覺得這一行不應(yīng)該存在,因為這一行將參數(shù)enable的值賦值給host->sdio_irqen,但是1398行又接著判斷enable與host->sdio_irqen是否相等,如果相等就退出了。
1401-1408行,enable為1,使能SDIO中斷。
1402行,S3C2410_SDICON_SDIOIRQ定義在drivers/mmc/host/s3cmci.c文件中:
57#define S3C2410_SDICON_SDIOIRQ (1 << 3)
對照S3C2440 Datasheet,可知這個宏用來設(shè)置SDICON寄存器的第3位,該位決定是否接收SDIO中斷。
1403行,S3C2410_SDIIMSK_SDIOIRQ定義在drivers/mmc/host/s3cmci.c文件中:
105#define S3C2410_SDIIMSK_SDIOIRQ (1 << 12)
對照S3C2440 Datasheet,可知這個宏用來設(shè)置SDIIntMsk寄存器的第13位,該位決定當(dāng)read wait request發(fā)生時,SDI是否產(chǎn)生一個中斷。
enable_imask函數(shù)定義在drivers/mmc/host/s3cmci.c文件中:
該函數(shù)用來設(shè)置SDIIntMsk寄存器。
1409-1416行,enable為0,禁用SDIO中斷。
1419行,用新的con設(shè)置SDICON即SDI控制寄存器。
s3cmci_set_ios函數(shù)定義在drivers/mmc/host/s3cmci.c文件中:
1306行,參數(shù)ios是structmmc_ios類型指針。struct mmc_ios定義在include/linux/mmc/host.h文件中: