Commit 75eaf49f authored by Tamás Szűcs's avatar Tamás Szűcs Committed by Ulf Hansson

mmc: sdhi: fill in actual_clock

Save set clock in mmc_host actual_clock enabling exporting it via debugfs.
This will indicate the precise SD clock in I/O settings rather than only the
sometimes misleading requested clock.
Signed-off-by: default avatarTamás Szűcs <tszucs@protonmail.ch>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 38eee2e8
...@@ -124,7 +124,7 @@ static unsigned int renesas_sdhi_clk_update(struct tmio_mmc_host *host, ...@@ -124,7 +124,7 @@ static unsigned int renesas_sdhi_clk_update(struct tmio_mmc_host *host,
{ {
struct renesas_sdhi *priv = host_to_priv(host); struct renesas_sdhi *priv = host_to_priv(host);
unsigned int freq, diff, best_freq = 0, diff_min = ~0; unsigned int freq, diff, best_freq = 0, diff_min = ~0;
int i, ret; int i;
/* tested only on R-Car Gen2+ currently; may work for others */ /* tested only on R-Car Gen2+ currently; may work for others */
if (!(host->pdata->flags & TMIO_MMC_MIN_RCAR2)) if (!(host->pdata->flags & TMIO_MMC_MIN_RCAR2))
...@@ -153,9 +153,9 @@ static unsigned int renesas_sdhi_clk_update(struct tmio_mmc_host *host, ...@@ -153,9 +153,9 @@ static unsigned int renesas_sdhi_clk_update(struct tmio_mmc_host *host,
} }
} }
ret = clk_set_rate(priv->clk, best_freq); clk_set_rate(priv->clk, best_freq);
return ret == 0 ? best_freq : clk_get_rate(priv->clk); return clk_get_rate(priv->clk);
} }
static void renesas_sdhi_set_clock(struct tmio_mmc_host *host, static void renesas_sdhi_set_clock(struct tmio_mmc_host *host,
...@@ -166,10 +166,13 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host *host, ...@@ -166,10 +166,13 @@ static void renesas_sdhi_set_clock(struct tmio_mmc_host *host,
sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN & sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN &
sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL)); sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
if (new_clock == 0) if (new_clock == 0) {
host->mmc->actual_clock = 0;
goto out; goto out;
}
clock = renesas_sdhi_clk_update(host, new_clock) / 512; host->mmc->actual_clock = renesas_sdhi_clk_update(host, new_clock);
clock = host->mmc->actual_clock / 512;
for (clk = 0x80000080; new_clock >= (clock << 1); clk >>= 1) for (clk = 0x80000080; new_clock >= (clock << 1); clk >>= 1)
clock <<= 1; clock <<= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment