From d0a5e915d2cea673f051854d2aee6863869167d0 Mon Sep 17 00:00:00 2001 From: Long Yu Date: Tue, 26 Dec 2017 13:09:38 +0800 Subject: [PATCH] emmc: refixed support for sdio wifi PD#154260: emmc: refixed support for sdio wifi 1. adjust sdio timing parameters Change-Id: Iecd400b0570c363cc1df450bc09f8dfa2d7fa533 Signed-off-by: Long Yu --- drivers/amlogic/mmc/aml_sd_emmc.c | 4 ++-- drivers/amlogic/mmc/aml_sd_emmc_v3.c | 27 +++++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/amlogic/mmc/aml_sd_emmc.c b/drivers/amlogic/mmc/aml_sd_emmc.c index 1226ecc0eca5..e95850bd1725 100644 --- a/drivers/amlogic/mmc/aml_sd_emmc.c +++ b/drivers/amlogic/mmc/aml_sd_emmc.c @@ -589,8 +589,8 @@ u32 aml_sd_emmc_tuning_transfer(struct mmc_host *mmc, break; } } else { - pr_err("Tuning transfer error: nmatch=%d\n", - nmatch); + pr_err("Tuning transfer error: nmatch=%d tuning_err:0x%x\n", + nmatch, tuning_err); break; } } diff --git a/drivers/amlogic/mmc/aml_sd_emmc_v3.c b/drivers/amlogic/mmc/aml_sd_emmc_v3.c index e7b402a14c36..369b1cef73f7 100644 --- a/drivers/amlogic/mmc/aml_sd_emmc_v3.c +++ b/drivers/amlogic/mmc/aml_sd_emmc_v3.c @@ -241,23 +241,21 @@ static void aml_sd_emmc_set_timing_v3(struct amlsd_host *host, clkc->div = clk_div / 2; if (aml_card_type_mmc(pdata)) clkc->core_phase = 2; - writel(vclkc, host->base + SD_EMMC_CLOCK_V3); - pdata->clkc = vclkc; pr_info("%s: try set sd/emmc to DDR mode\n", mmc_hostname(host->mmc)); - } else if (timing == MMC_TIMING_MMC_HS) { + } else if (timing == MMC_TIMING_MMC_HS) clkc->core_phase = 3; - writel(vclkc, host->base + SD_EMMC_CLOCK_V3); - pdata->clkc = vclkc; - } else if ((timing == MMC_TIMING_MMC_HS200) - || ((timing == MMC_TIMING_MMC_HS) - && aml_card_type_non_sdio(pdata))) { + else if ((timing == MMC_TIMING_MMC_HS200) + || ((timing == MMC_TIMING_SD_HS) + && aml_card_type_non_sdio(pdata)) + || (timing == MMC_TIMING_UHS_SDR104)) { clkc->core_phase = 2; - writel(vclkc, host->base + SD_EMMC_CLOCK_V3); - pdata->clkc = vclkc; } else ctrl->ddr = 0; + writel(vclkc, host->base + SD_EMMC_CLOCK_V3); + pdata->clkc = vclkc; + writel(vctrl, host->base + SD_EMMC_CFG); pr_debug("sd emmc is %s\n", ctrl->ddr?"DDR mode":"SDR mode"); @@ -775,8 +773,8 @@ static int emmc_ds_core_align(struct mmc_host *mmc) delay2 += (cmd_count<<24); writel(delay1, host->base + SD_EMMC_DELAY1_V3); writel(delay2, host->base + SD_EMMC_DELAY2_V3); - pr_debug("ds_count:%d,delay1:0x%x,delay2:0x%x,count: %u\n", - ds_count, readl(host->base + SD_EMMC_DELAY1_V3), + pr_debug("cmd_count:%d,delay1:0x%x,delay2:0x%x,count: %u\n", + cmd_count, readl(host->base + SD_EMMC_DELAY1_V3), readl(host->base + SD_EMMC_DELAY2_V3), count); return 0; } @@ -1201,10 +1199,11 @@ RETRY: writel(delay1, host->base + SD_EMMC_DELAY1_V3); host->is_tunning = 0; - pr_info("%s: gadjust=0x%x, gdelay1=0x%x\n", + pr_info("%s: gadjust=0x%x, gdelay1=0x%x, gclock=0x%x\n", mmc_hostname(host->mmc), readl(host->base + SD_EMMC_ADJUST_V3), - readl(host->base + SD_EMMC_DELAY1_V3)); + readl(host->base + SD_EMMC_DELAY1_V3), + readl(host->base + SD_EMMC_CLOCK_V3)); return 0; }