linux mmc 子系统,Linux设备模型之mmc,sd子系统<三>

####mmc_attach_bus函数会将bus的操作绑定到host上.

####core.c中

/*

* Assign a mmc bus handler to a host. Only one bus handler may control a

* host at any given time.

*/

void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops)

{

unsigned long flags;

BUG_ON(!host);

BUG_ON(!ops);

WARN_ON(!host->claimed);

spin_lock_irqsave(&host->lock, flags);

BUG_ON(host->bus_ops);

BUG_ON(host->bus_refs);

host->bus_ops = ops;                                              //指向对应的操作结构

host->bus_refs = 1;

host->bus_dead = 0;

spin_unlock_irqrestore(&host->lock, flags);

}

#####再看另外一个函数mmc_add_card,

####这个函数在bus.c 中,

/*

* Register a new MMC card with the driver model.

*/

int mmc_add_card(struct mmc_card *card)

{

int ret;

const char *type;

dev_set_name(&card->dev, "%s:%04x", mmc_hostname(card->host), card->rca);

switch (card->type) {

case MMC_TYPE_MMC:

type = "MMC";

break;

case MMC_TYPE_SD:

type = "SD";

if (mmc_card_blockaddr(card)) {

if (mmc_card_ext_capacity(card))

type = "SDXC";

else

type = "SDHC";

}

break;

case MMC_TYPE_SDIO:

type = "SDIO";

break;

case MMC_TYPE_SD_COMBO:

type = "SD-combo";

if (mmc_card_blockaddr(card))

type = "SDHC-combo";

break;

default:

type = "?";

break;

}

if (mmc_host_is_spi(card->host)) {

pr_info("%s: new %s%s%s card on SPI\n",

mmc_hostname(card->host),

mmc_card_highspeed(card) ? "high speed " : "",

mmc_card_ddr_mode(card) ? "DDR " : "",

type);

} else {

printk(KERN_INFO "%s: new %s%s%s card at address %04x\n",

mmc_hostname(card->host),

mmc_sd_card_uhs(card) ? "ultra high speed " :

(mmc_card_highspeed(card) ? "high speed " : ""),

mmc_card_ddr_mode(card) ? "DDR " : "",

type, card->rca);

}

#ifdef CONFIG_DEBUG_FS

mmc_add_card_debugfs(card);

#endif

ret = device_add(&card->dev);

if (ret)

return ret;

mmc_card_set_present(card);

return 0;

}0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值