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 //启动主机控制器