回到s3cmci_probe函數(shù):
1638-1648行,通過gpio_request函數(shù)申請獲取GPE5-GPE10。從Mini2440原理圖可以看 出,Mini2440SDI使用的GPE7-GPE10作為4根數(shù)據(jù)信號線,使用GPE6作為命令信號線,使用GPE5作為時鐘信號線。另外,使用 GPG8的外部中斷功能來作SD卡的插撥檢測,使用GPH8來判斷SD卡是否有寫保護。
1650行,通過調(diào)用mmc_priv(mmc)取得s3cmci_host指針變量host。
下面的內(nèi)容就是初始化host的各個成員變量。
1681行,調(diào)用platform_get_resource(pdev,IORESOURCE_MEM, 0)取得IORESOURCE_MEM類型資源。IORESOURCE_MEM宏定義在include/linux/ioport.h文件中:
platform_get_resource函數(shù)定義在drivers/base/platform.c文件中:
resource_type定義在include/linux/ioport.h文件中:
回憶一下,Mini2440的資源文件s3c_sdi_resource定義在arch/arm/plat-samsung/devs.c文件中:
宏S3C24XX_PA_SDI定義在arch/arm/mach-s3c24xx/include/mach/map.h文件中:
宏S3C2410_PA_SDI定義在arch/arm/mach-s3c24xx/include/mach/map.h文件中:
0x5A000000是S3C2440 SDICON寄存器的地址。
宏S3C24XX_SZ_SDI定義在arch/arm/mach-s3c24xx/include/mach/map.h文件中:
宏SZ_1M定義在include/linux/sizes.h文件中:
所以s3cmci_probe函數(shù)1681行,platform_get_resource(pdev, IORESOURCE_MEM, 0)函數(shù)返回的就是s3c_sdi_resource[0]。
1690-1691行,調(diào)用 request_mem_region(host->mem->start,resource_size(host->mem), pdev->name)函數(shù),該函數(shù)用于獲取參數(shù)指定的內(nèi)存空間。request_mem_region函數(shù)定義在include/linux /ioport.h文件中:
177#define request_mem_region(start,n,name)__request_region(&iomem_resource, (start), (n), (name), 0)
__request_region定義在kernel/resource.c文件中:
1699行,調(diào)用ioremap(host->mem->start,resource_size(host->mem))宏,該宏完成物理內(nèi)存到虛擬內(nèi)存的映射。ioremap宏定義在arch/arm/include/asm/io.h文件中:
__arm_ioremap函數(shù)定義在arch/arm/mm/ioremap.c文件中:
1706行,調(diào)用platform_get_irq函數(shù)獲取設備中斷。platform_get_irq函數(shù)定義在drivers/base/platform.c文件中:
1713行,調(diào)用request_irq(host->irq,s3cmci_irq, 0, DRIVER_NAME, host)申請中斷,中斷處理函數(shù)是s3cmci_irq。
1723行,調(diào)用disable_irq禁用中斷。
1726-1751行,處理SD卡探測相關內(nèi)容。
1753-1761行,處理SD卡寫保護相關內(nèi)容。
1765-1778行,處理DMA相關內(nèi)容。
1780-1794行,處理時鐘相關內(nèi)容。
1796-1814行,初始化mmc。
需要注意的是1796行,設置mmc->ops為s3cmci_ops,s3cmci_ops定義在drivers/mmc/host/s3cmci.c文件中:
1821行,調(diào)用s3cmci_cpufreq_register(host),提供對變頻的支持。
1827行,調(diào)用mmc_add_host(mmc),向core層注冊mmc_host。
1833行,調(diào)用s3cmci_debugfs_attach(host)創(chuàng)建debugfs相關節(jié)點。
至此,s3cmci_probe函數(shù)我們就分析完了。