From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/mmc/host/dw_mmc.c | 29 +++++++++++++++++++++++++++-- 1 files changed, 27 insertions(+), 2 deletions(-) diff --git a/kernel/drivers/mmc/host/dw_mmc.c b/kernel/drivers/mmc/host/dw_mmc.c index 51dee0a..954e932 100644 --- a/kernel/drivers/mmc/host/dw_mmc.c +++ b/kernel/drivers/mmc/host/dw_mmc.c @@ -246,7 +246,7 @@ * ...also allow sending for SDMMC_CMD_VOLT_SWITCH where busy is * expected. */ -#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT +#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_MMC if (host->slot->mmc->restrict_caps & RESTRICT_CARD_TYPE_EMMC) delay = 0; #endif @@ -1508,6 +1508,9 @@ switch (ios->power_mode) { case MMC_POWER_UP: + if (!IS_ERR_OR_NULL(slot->host->pinctrl)) + pinctrl_select_state(slot->host->pinctrl, slot->host->idle_state); + if (!IS_ERR(mmc->supply.vmmc)) { ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); @@ -1524,6 +1527,9 @@ mci_writel(slot->host, PWREN, regs); break; case MMC_POWER_ON: + if (!IS_ERR_OR_NULL(slot->host->pinctrl)) + pinctrl_select_state(slot->host->pinctrl, slot->host->normal_state); + if (!slot->host->vqmmc_enabled) { if (!IS_ERR(mmc->supply.vqmmc)) { ret = regulator_enable(mmc->supply.vqmmc); @@ -1548,6 +1554,9 @@ break; case MMC_POWER_OFF: + if (!IS_ERR_OR_NULL(slot->host->pinctrl)) + pinctrl_select_state(slot->host->pinctrl, slot->host->idle_state); + /* Turn clock off before power goes down */ dw_mci_setup_bus(slot, false); @@ -3272,6 +3281,22 @@ return ERR_PTR(ret); } + host->pinctrl = devm_pinctrl_get(host->dev); + if (!IS_ERR(host->pinctrl)) { + host->normal_state = pinctrl_lookup_state(host->pinctrl, "normal"); + if (IS_ERR(host->normal_state)) + dev_warn(dev, "No normal pinctrl state\n"); + + host->idle_state = pinctrl_lookup_state(host->pinctrl, "idle"); + if (IS_ERR(host->idle_state)) + dev_warn(dev, "No idle pinctrl state\n"); + + if (!IS_ERR(host->normal_state) && !IS_ERR(host->idle_state)) + pinctrl_select_state(host->pinctrl, host->idle_state); + else + host->pinctrl = NULL; + } + return pdata; } @@ -3329,7 +3354,7 @@ return ret; } } -#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT +#ifdef CONFIG_ROCKCHIP_THUNDER_BOOT_MMC if (device_property_read_bool(host->dev, "supports-emmc")) { if (readl_poll_timeout(host->regs + SDMMC_STATUS, fifo_size, -- Gitblit v1.6.2