int stop;might_sleep();// 说明这个函数可能导致进程休眠add_wait_queue(&host->wq, &wait);// 把当前进程加入到等待队列中spin_lock_irqsave(&host->lock, flags);while(1) {// 以下尝试获取host,如果host正在被占用,会进入休眠set_current_state(TASK_UNINTERRUPTIBLE);// 设置进程状态为TASK_UNINTERRUPTI...
原型:intmmc_register_host_class(void)原型:voidmmc_unregister_host_class(void) 3、mmc host属性解析相关 mmc_of_parse 底层host controller驱动调用,解析mmc_host的dtsi节点的部分属性。 原型:voidmmc_of_parse(structmmc_host *host) 4、mmc host时钟相关 mmc_host_clk_hold & mmc_host_clk_release mmc ...
mmc_start_host 用来启动一个host,mmc_stop_host用来停止一个host。当底层host controller调用mmc_add_host来注册host时,在mmc_add_host中就会调用mmc_start_host来启动一个host了。具体参考《mmc core——host模块说明》。相对应的,会在mmc_remove_host中调用mmc_stop_host停止host。void mmc_start_host(struct ...
mmc_host_clk_hold & mmc_host_clk_release mmc core主模块调用,用于获取host时钟和释放host时钟 二、数据结构 1、mmc_host_class mmc_host_class代表了mmc_host这个类。其内容如下: 代码语言:javascript 复制 staticstructclassmmc_host_class={.name="mmc_host",// 添加到sys文件系统之后,会生成/sys/class/...
mmc_detect_change(host, 0); // } 在mmc_power_off(host);函数中进行各种各样的设置; static void mmc_power_off(struct mmc_host *host) { mmc_host_clk_hold(host); host->ios.clock = 0; host->ios.vdd = 0; host->ocr = 1 << (fls(host->ocr_avail) - 1); ...
而本文的mmc总线是一种物理概念,是实际的总线,是和host controller直接相关联的。 一、API总览 1、mmc type card匹配相关 mmc_attach_mmc 提供给mmc core主模块使用,用于绑定card到host bus上(也就是card和host的绑定)。 通过mmc_host获取mmc type card信息,初始化mmc_card,并进行部分驱动,最后将其注册到mmc...
mmc_host_clk_hold(card->host); err= card->host->ops->execute_tuning(card->host, MMC_SEND_TUNING_BLOCK); mmc_host_clk_release(card->host); }out: kfree(status);returnerr; } linux并没有发送CMD42,spec上原话: “When entering tran state, CARD_IS_LOCKED status in the R1 response shoul...
host电源状态的保存和恢复 host总线操作集的绑定和解绑 host上卡状态检测 为其他模块提供mmc_card的操作接口,如下 card的唤醒和休眠 card擦除 card属性的获取 为其他模块提供总线io setting的接口 为其他模块提供mmc请求接口 card检测接口 bkops操作接口 regulator操作接口 ...
mmc_host_clk_hold(mmc);mmc_set_clock(mmc, clock_setting_value); mmc_host_clk_release(mmc); clock_max = clock_setting_value; clock_flag =1; clock_show = clock_setting_value; printk("%s : result of clock value =%d\n", __func__,clock_setting_value);returncount; ...
第一阶段:我们看host/目录下的 s3cmci.c 老方法,先找 module_init(s3cmci_init);可以看出Host驱动注册函数入口是s3cmci_init。 static int __init s3cmci_init(void) { platform_driver_register(&s3cmci_driver_2410); } 直接到s3cmci_driver_2410 来寻找probe 函数,可以看到 s3cmci_probe_2410; ...