sdhci_do_reset(host, SDHCI_RESET_ALL); //mmc/host/sdhci.c host->ops->reset(host, mask); host->version = (sdhci_readw(host, SDHCI_HOST_VERSION) & SDHCI_SPEC_VER_MASK) >> SDHCI_SPEC_VER_SHIFT; 如果(host->quirks & SDHCI_QUIRK_MISSING_CAPS) return 否则host->caps = caps ?
"sdhci-caps-mask", 0); dt_caps = dev_read_u64_default(host->mmc->dev, "sdhci-caps", 0); caps = ~(u32)dt_caps_mask & sdhci_readl(host, SDHCI_CAPABILITIES); printf("%s, %d: Device %s\n", __func__,__LINE__, host->mmc->dev->name); ...
AI代码解释 /* Controller doesn't honor resets unless we touch the clock register */#defineSDHCI_QUIRK_CLOCK_BEFORE_RESET(1<<0)/* Controller has bad caps bits, but really supports DMA */#defineSDHCI_QUIRK_FORCE_DMA(1<<1)/* Controller doesn't like to be reset when there is no card i...
host->version = (host->version & SDHCI_SPEC_VER_MASK) >> SDHCI_SPEC_VER_SHIFT;// 获取sdhci host的硬件版本号/* 获取sdhci controller支持的属性 */caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps :sdhci_readl(host, SDHCI_CAPABILITIES);// SDHCI_QUIRK_MISSING_CAPS:Contr...
(caps[0] & SDHCI_CLOCK_V3_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; // 从sdhci controller的SDHCI_CLOCK_V3_BASE_MASK读取最大clock(单位是MHZ) else host->max_clk = (caps[0] & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; host->max_clk *= 1000000;(转化为hz) // 设置sdhci_host...
host->max_clk = (caps & SDHCI_CLOCK_V3_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; else cfg->f_max = (caps & SDHCI_CLOCK_BASE_MASK) >> host->max_clk = (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT; cfg->f_max *= 1000000; host->max_clk *= 1000000; } if (cfg-...
/* Timer for timeouts */ 485 486 u32 caps; /* Alternative CAPABILITY_0 */ 487 u32 caps1; /* Alternative CAPABILITY_1 */ 488 489 unsigned int ocr_avail_sdio; /* OCR bit masks */ 490 unsigned int ocr_avail_sd; 491 unsigned int ocr_avail_mmc; 492 u32 ocr_mask; /* available ...
intmask, u32 *mask) BUG_ON(intmask == 0); if (!host->cmd) { - pr_err("%s: Got command interrupt 0x%08x even " - "though no command operation was in progress.\n", - mmc_hostname(host->mmc), (unsigned)intmask); + pr_err("%s: Got command interrupt 0x%08x even though no...
SDHC_ADAPTER_TYPE: ADAPTER_TYPE_1 0x1 /* eMMC Card Rev4.5 */ ADAPTER_TYPE_2 0x2 /* SD/MMC Legacy Card */ ADAPTER_TYPE_3 0x3 /* eMMC Card Rev4.4 */ ADAPTER_TYPE_4 0x4 /* Reserved */ ADAPTER_TYPE_5 0x5 /* MMC Card */ ...
u32 mask, val; int ret;/* Disable delay chain mode */ regmap_update_bits(plat->base, PHY_CTRL5, SELDLYTXCLK_MASK | SELDLYRXCLK_MASK, 0);if (plat->flags & FREQSEL_2_BIT) { switch (speed) { case 200000000: sel50 = 0;