struct sdhci_host {
/* Data set by hardware interface driver */
const char *hw_name; /* Hardware bus name */
unsigned int quirks; /* Deviations from spec. */
/* 在复位前需要设置时钟 */
/* Controller doesn't honor resets unless we touch the clock register */
#define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1<<0)
/* 强制使用DMA */
/* Controller has bad caps bits, but really supports DMA */
#define SDHCI_QUIRK_FORCE_DMA (1<<1)
/* 没有卡插入时不复位 */
/* Controller doesn't like to be reset when there is no card inserted. */
#define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2)
/* 控制器不喜欢在MMC_VDD改变前清除电源寄存器 */
/* 遇到这个,直接改电源寄存器,不清除 */
/* Controller doesn't like clearing the power reg before a change */
#define SDHCI_QUIRK_SINGLE_POWER_WRITE (1<<3)
/* 在sdhci_do_set_ios()中会用到 */
/* 解释:有些控制器在一些操作时会疯,即使是CMD0,解决方法就是复位每一个IOS */
/* Controller has flaky internal state so reset it on each ios change */
#define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS (1<<4)
/* 控制器有一个不可使用的DMA引擎 */
/* Controller has an unusable DMA engine */
#define SDHCI_QUIRK_BROKEN_DMA (1<<5)
/* ADMA: Advanced DMA */
/* 控制器有一个不可使用的ADMA引擎 */
/* Controller has an unusable ADMA engine */
#define SDHCI_QUIRK_BROKEN_ADMA (1<<6)
/* DMA要32位地址对齐 */
/* Controller can only DMA from 32-bit aligned addresses */
#define SDHCI_QUIRK_32BIT_DMA_ADDR (1<<7)
/* DMA的大小是32的倍数 */
/* Controller can only DMA chunk sizes that are a multiple of 32 bits */
#define SDHCI_QUIRK_32BIT_DMA_SIZE (1<<8)
/* ADMA的大小是32位的倍数 */
/* Controller can only ADMA chunks that are a multiple of 32 bits */
#define SDHCI_QUIRK_32BIT_ADMA_SIZE (1<<9)
/* 每个请求之后,控制器需要复位来爆出稳定 */
/* 在sdhci_tasklet_finish()中,即任务完成时, */
/* 当host->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST成立时,执行复位 */
/* Controller needs to be reset after each request to stay stable */
#define SDHCI_QUIRK_RESET_AFTER_REQUEST (1<<10)
/* 控制器需要分别写入电压和电源 */
/* 这个标准是开启电源时,要先设置电压 */
/* Marvell CaFe芯片就是如此,代码上要先设置,再或上SDHCI_POWER_ON开启 */
/* if (host->quirks & SDHCI_Q
sdhci.h
最新推荐文章于 2024-08-31 09:31:39 发布
本文详细介绍了SDHCI控制器的各种特性及偏离规范的行为标志,包括时钟配置、DMA支持、电源管理等方面的问题及其解决方案。

最低0.47元/天 解锁文章
5337

被折叠的 条评论
为什么被折叠?



