以s3cmci.c为例,它首先要进行一些设置,例如中断函数注册,全能控制器等等。然后它会向core层注册一个主机(host),用结构mmc_host_ops描述,这样核心层就可以拿着这个host来操作s3c24xx的卡控制器了,而具体是s3c24xx的卡控制器还是Baytrail的卡控制器,core层是不用知道的。 3、结构体描述 Linux SD Driver (
mmc_host->struct mmc_host_ops *ops,这个是host的操作集,由host controller驱动决定。对于sdhci类host来说,就是sdhci_ops(sdhci.c中设置)。 mmc_host->struct mmc_bus_ops *bus_ops,这个是mmc总线的操作集(也可以理解为host的mmc bus handler,host的总线处理方法),由总线上的card type决定。对于mmc card t...
struct mmc_host{struct device*parent;// 对应的host controller的devicestruct device class_dev;// mmc_host的device结构体,会挂在class/mmc_host下int index;// 该host的索引号conststruct mmc_host_ops*ops;// 该host的操作集,由host controller设置,后面说明unsigned int f_min;// 该host支持的最低频率...
由此,mmc card dev就和上面注册的mmc_host_ops关联起来了。 5.MMC test driver 使用 在第二章介绍card driver时候已经介绍到了mmc test driver了。如果要使用mmc_test function,可以按照如下步骤: 1.CONFIG_MMC_BLOCK=n,CONFIG_MMC_TEST=y。或者CONFIG_MMC_BLOCK=y, CONFIG_MMC_TEST=y。如果选用后一种配置,...
int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries); mmc card层就是通过这些函数来操作mmc/sd卡。而这些函数最终调用的是mmc_host_ops 结构体中的request函数来进行具体的操作。 对SD/MMC卡的侦测函数以及初始化,主要实现在 ...
Linux MMC HOST驱动整理(以RV1126+Kernel4.19为例) 1. mmc子系统驱动简介 mmc子系统驱动分为三层,分别为: Block层:主要作用是对接通用块层,创建块设备及上层请求处理等工作。 Core层:主要提供协议层的内容,为Block层、Host层提供相应接口。 Host层:主要是对接SOC的MMC控制器,是比较底层的寄存器操作及中断操作。
// 自定义的mmc_host_ops,用于host做实际操作时回调 static const struct mmc_host_ops xxx_mmc_ops= { .request = xxx_mmc_request, .set_ios = xxx_mmc_set_ios, }; /* platformdriver probe function * static int xxx_mmc_probe(struct platform_device *pdev) { struct mmc_host *mmc; struct...
会向核心层注册控制器mmc_hos被封装成platform_device;struct mmc_host_ops用来描述控制器操作集,并向核心层注册操作集;利用bus_register()注册mmc_bus_type。对应sysfs下的/sys/bus/mmc/目录;利用class_register()注册mmc_host_class。对应sysfs下的/sys/class/mmc_host目录;当控制器匹配到控制器驱动会调用其.pr...
slot->host = host; host->slot = slot; mmc->ops = &dw_mci_ops;//mmc_host_ops, 操作函数集/*if there are external regulators, get them*/ret = mmc_regulator_get_supply(mmc);if(ret)gotoerr_host_allocated;if(!mmc->ocr_avail) ...
由此,mmc card dev就和上面注册的mmc_host_ops关联起来了。 5.MMC test driver 使用 在第二章介绍card driver时候已经介绍到了mmc test driver了。如果要使用mmc_test function,可以按照如下步骤: 1.CONFIG_MMC_BLOCK=n,CONFIG_MMC_TEST=y。或者CONFIG_MMC_BLOCK=y, CONFIG_MMC_TEST=y。如果选用后一种配置,...