sdio: optimize sdio clk cfg [2/2]
authorNan Li <nan.li@amlogic.com>
Thu, 11 Jul 2019 07:33:56 +0000 (15:33 +0800)
committerNan Li <nan.li@amlogic.com>
Fri, 12 Jul 2019 11:22:35 +0000 (04:22 -0700)
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 <nan.li@amlogic.com>
drivers/amlogic/mmc/amlsd.c

index dfb2ad7..9ea8262 100644 (file)
@@ -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)
 {
 }