Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76082
  • 博文数量: 38
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-28 14:15
文章分类

全部博文(38)

文章存档

2013年(1)

2012年(37)

我的朋友

分类:

2012-05-12 13:58:06

in MMC host controller driver initialization process, msmsdcc_probe() function will be called. but in fact, kernel has not detected the real MMC host controller hardware till now, so it should has detect process.
there are two process for detect mechanism.
one is for "MMC / SD / SDIO card hardware is already ready while the kernel does initial process". some MMC / SD / SDIO card hardware is jointed to the host controller by hardware design, for example, WIFI chipset which uses SDIO interface.
another is for "MMC / SD / SDIO card hardware is not inserted while the kernel does initial process". one example for it is MMC / SD storage card, the card may be inserted at any time according to customer's request.

1. now let us analysis these two processes.

1.1  MMC / SD / SDIO card hardware is ready while the kernel does initial process.
as we know, msmsdcc_probe() function will be called in MMC host controller driver initialization.
this function do detect process in fact. the below the process.
msmsdcc_probe() -> mmc_add_host() -> mmc_start_host() -> mmc_detect_change() -> (&host->detect) -> mmc_rescan().
we will analysis mmc_rescan() function after a while.

1.2 MMC / SD / SDIO card hardware is not inserted while the kernel does initial process.
irq is used for this kind of detect process.
in msmsdcc_probe() function, it will register a irq for the card detect process.

        ret = request_irq(plat->status_irq,
                  msmsdcc_platform_status_irq,
                  IRQF_SHARED | plat->irq_flags,
                  DRIVER_NAME " (slot)",
                  host);
so, the detect process is as below:
msmsdcc_platform_status_irq() -> msmsdcc_check_status() -> mmc_detect_change() ->  -> (&host->detect) -> mmc_rescan()

now it is time to analysis mmc_rescan() function which does real detect process.
2. mmc rescan() function process analysis.
it is in driver/mmc/core/core.c
a. scan SDIO device firstly,
mmc_send_io_op_cond()  , it sends CMD5 command to detect SDIO device.
b. then scan SD device.
mmc_send_app_op_cond(), it sends CMD41 command to detect SD device.
c. scan MMC device at last.
mmc_send_op_cond(), it sends CMD1 command to detect MMC device.

for example, if mmc_send_io_op_cond() returns ok, mmc_attach_sdio() function will be called.

阅读(361) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~