|
@@ -821,6 +821,9 @@ static int sunxi_mmc_clk_set_rate(struct sunxi_mmc_host *host,
|
|
rval |= div - 1;
|
|
rval |= div - 1;
|
|
mmc_writel(host, REG_CLKCR, rval);
|
|
mmc_writel(host, REG_CLKCR, rval);
|
|
|
|
|
|
|
|
+ /* update card clock rate to account for internal divider */
|
|
|
|
+ rate /= div;
|
|
|
|
+
|
|
if (host->use_new_timings) {
|
|
if (host->use_new_timings) {
|
|
/* Don't touch the delay bits */
|
|
/* Don't touch the delay bits */
|
|
rval = mmc_readl(host, REG_SD_NTSR);
|
|
rval = mmc_readl(host, REG_SD_NTSR);
|
|
@@ -828,6 +831,7 @@ static int sunxi_mmc_clk_set_rate(struct sunxi_mmc_host *host,
|
|
mmc_writel(host, REG_SD_NTSR, rval);
|
|
mmc_writel(host, REG_SD_NTSR, rval);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* sunxi_mmc_clk_set_phase expects the actual card clock rate */
|
|
ret = sunxi_mmc_clk_set_phase(host, ios, rate);
|
|
ret = sunxi_mmc_clk_set_phase(host, ios, rate);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
@@ -849,7 +853,7 @@ static int sunxi_mmc_clk_set_rate(struct sunxi_mmc_host *host,
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
/* And we just enabled our clock back */
|
|
/* And we just enabled our clock back */
|
|
- mmc->actual_clock = rate / div;
|
|
|
|
|
|
+ mmc->actual_clock = rate;
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|