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 <nan.li@amlogic.com>
This commit is contained in:
Nan Li
2019-07-11 15:33:56 +08:00
parent d8fc3cc827
commit 3791025d14

View 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)
{
}