《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 其他 > Linux设备驱动程序架构分析之MMC/SD(八)

Linux设备驱动程序架构分析之MMC/SD(八)

2015-04-29
关键词: mmc_host

1308行,由mmc_host取得s3cmci_host。

1313行,读取SDICON即SDI控制寄存器的值,保存在mci_con中。

1316-1328行,如果ios->power_mode为MMC_POWER_ON或MMC_POWER_UP,则执行这个分支。

S3C_GPIO_SFN宏定义在arch/arm/plat-samsung/include/plat/gpio-cfg.h文件中:

捕获.PNG

S3C_GPIO_PULL_NONE宏定义在arch/arm/plat-samsung/include/plat/gpio-cfg.h文件中:

捕获.PNG

s3c_gpio_cfgall_range函数定义在drivers/gpio/gpio-samsung.c文件中:

捕获.PNG

可以看到,s3c_gpio_cfgall_range函数设置从GPE5开始的6个GPIO,即GPE5、GPE6、GPE7、GPE8、GPE9、GPE10。使用参数cfg设置GPECON寄存器,使用参数pull设置GPEUP寄存器。

GPECON寄存器对应的位置被设置为01,即使能相关SDI功能。

1330-1341行,如果ios->power_mode为MMC_POWER_OFF或者default,则执行这个分支。

1332行,调用gpio_direction_output(S3C2410_GPE(5),0)关闭SDI时钟。

1335行,mci_con |=S3C2440_SDICON_SDRESET,根据S3C2440数据手册,这句用于reset整个sd/mmc模块。

1343行,调用s3cmci_set_clk(host,ios)设置时钟,s3cmci_set_clk定义在drivers/mmc/host/s3cmci.c文件中:

捕获.PNG

1346-1349行,如果ios->clock不为0,使能时钟,否则禁用时钟。

1351行,将mci_con写回SDICON寄存器。

1361行,用ios->bus_width设置数据总线宽度host->bus_width。

s3cmci_request函数定义在drivers/mmc/host/s3cmci.c文件中:

捕获.PNG

struct mmc_request代表一个request,该结构体定义在include/linux/mmc/core.h文件中:

捕获.PNG

1271行,将host->status设置为"mmcrequest",host->status主要用于记录request处理所处的阶段及状态,方便调试使用。

1272行,设置host->cmd_is_stop为0,从字面上理解,我认为host->cmd_is_stop代表command是否是stop命令(即有一个command是stop),0表示不是stop命令。

1273行,将mmc_requestmrp保存在host->mrq中,方便以后使用。

1275-1280行,如果卡不存在,则调用mmc_request_done(mmc,mrq)结束这次request处理,否则,调用s3cmci_send_request(mmc)。

s3cmci_send_request函数定义在drivers/mmc/host/s3cmci.c文件中:

捕获.PNG

捕获.PNG

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。