mmc host流程

文章详细描述了Linux内核中关于MMC主机控制器的驱动实现,包括mmchost结构体的定义,如mmc_host_class类和sunxi_mmc_ops操作接口的设置。在代码流程中,展示了从模块初始化、mmc_host的分配、设备命名、操作接口赋值到添加到mmc总线和启动主机控制器的过程。
摘要由CSDN通过智能技术生成

1.mmc host结构体定义

static struct class mmc_host_class = {
	.name		= "mmc_host",
	.dev_release	= mmc_host_classdev_release,
	.shutdown_pre	= mmc_host_classdev_shutdown,
	.pm		= MMC_HOST_CLASS_DEV_PM_OPS,
};

2.mmc host操作接口定义

static struct mmc_host_ops sunxi_mmc_ops = {
	.post_req = sunxi_mmc_post_req,
	.pre_req = sunxi_mmc_pre_req,
	.request = sunxi_mmc_request,
	.request_atomic = sunxi_mmc_request_atomic,
	.set_ios = sunxi_mmc_set_ios,
	.get_ro = mmc_gpio_get_ro,
	.get_cd = sunxi_mmc_gpio_get_cd,
	.enable_sdio_irq = sunxi_mmc_enable_sdio_irq,
	.hw_reset = sunxi_mmc_hw_reset,
	.start_signal_voltage_switch = sunxi_mmc_signal_voltage_switch,
	.card_busy = sunxi_mmc_card_busy,
};

3. 代码流程

module_platform_driver(sunxi_mmc_driver)
    sunxi_mmc_probe
        mmc_alloc_host
            dev_set_name(&host->class_dev, "mmc%d", host->index);
            host->class_dev.class = &mmc_host_class;
	        INIT_DELAYED_WORK(&host->detect, mmc_rescan);
	        INIT_DELAYED_WORK(&host->sdio_irq_work, sdio_irq_work);
	        timer_setup(&host->retune_timer, mmc_retune_timer, 0);
        mmc->ops		= &sunxi_mmc_ops;
        mmc_add_host	//添加主机控制器到mmc总线上
            device_add(&host->class_dev) //host->class_dev=”mmc%d”
            mmc_start_host	//启动主机控制器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值