From 3791025d14c989c2aa87dff0e909fecb376e5acf Mon Sep 17 00:00:00 2001 From: Nan Li Date: Thu, 11 Jul 2019 15:33:56 +0800 Subject: [PATCH] sdio: optimize sdio clk cfg [2/2] PD#SWPL-9640 Problem: sdio auto_clk close fail. Solution: optimize sdio auto_clk cfg, add sdio_clk_always_on(int on). Verify: G12A_u211 Change-Id: Id760b41a948c6b7e15f675376084b0cdd4edc151 Signed-off-by: Nan Li --- drivers/amlogic/mmc/amlsd.c | 49 ++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/drivers/amlogic/mmc/amlsd.c b/drivers/amlogic/mmc/amlsd.c index dfb2ad7fa6f8..9ea8262db1d9 100644 --- a/drivers/amlogic/mmc/amlsd.c +++ b/drivers/amlogic/mmc/amlsd.c @@ -275,6 +275,33 @@ void aml_emmc_hw_reset(struct mmc_host *mmc) #endif } +void sdio_clk_always_on(int on) +{ + u32 vconf = 0; + struct sd_emmc_config *pconf = (struct sd_emmc_config *)&vconf; + struct amlsd_platform *pdata = NULL; + struct amlsd_host *host = NULL; + + if (sdio_host) { + pdata = mmc_priv(sdio_host); + host = pdata->host; + + vconf = readl(host->base + SD_EMMC_CFG); + if (on) { + pconf->auto_clk = 0; + pconf->spare = 1; + } else { + pconf->auto_clk = 1; + pconf->spare = 0; + } + writel(vconf, host->base + SD_EMMC_CFG); + + pr_info("clk always on (%d): cfg = %x\n", + on, readl(host->base + SD_EMMC_CFG)); + } +} +EXPORT_SYMBOL(sdio_clk_always_on); + static void sdio_rescan(struct mmc_host *mmc) { int ret; @@ -304,28 +331,6 @@ void sdio_reinit(void) } EXPORT_SYMBOL(sdio_reinit); -void sdio_clk_always_on(void) -{ - u32 vconf = 0; - struct sd_emmc_config *pconf = (struct sd_emmc_config *)&vconf; - struct amlsd_platform *pdata = NULL; - struct amlsd_host *host = NULL; - - if (sdio_host) { - pdata = mmc_priv(sdio_host); - host = pdata->host; - - vconf = readl(host->base + SD_EMMC_CFG); - pconf->auto_clk = 0; - pconf->spare = 1; - writel(vconf, host->base + SD_EMMC_CFG); - - pr_info("clk always on: cfg = %x\n", - readl(host->base + SD_EMMC_CFG)); - } -} -EXPORT_SYMBOL(sdio_clk_always_on); - void of_amlsd_pwr_prepare(struct amlsd_platform *pdata) { }