|
@@ -253,6 +253,8 @@ struct sunxi_mmc_cfg {
|
|
|
|
|
|
/* does the IP block support autocalibration? */
|
|
/* does the IP block support autocalibration? */
|
|
bool can_calibrate;
|
|
bool can_calibrate;
|
|
|
|
+
|
|
|
|
+ bool needs_new_timings;
|
|
};
|
|
};
|
|
|
|
|
|
struct sunxi_mmc_host {
|
|
struct sunxi_mmc_host {
|
|
@@ -779,6 +781,9 @@ static int sunxi_mmc_clk_set_rate(struct sunxi_mmc_host *host,
|
|
}
|
|
}
|
|
mmc_writel(host, REG_CLKCR, rval);
|
|
mmc_writel(host, REG_CLKCR, rval);
|
|
|
|
|
|
|
|
+ if (host->cfg->needs_new_timings)
|
|
|
|
+ mmc_writel(host, REG_SD_NTSR, SDXC_2X_TIMING_MODE);
|
|
|
|
+
|
|
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;
|
|
@@ -1076,6 +1081,7 @@ static const struct sunxi_mmc_cfg sun50i_a64_cfg = {
|
|
.idma_des_size_bits = 16,
|
|
.idma_des_size_bits = 16,
|
|
.clk_delays = NULL,
|
|
.clk_delays = NULL,
|
|
.can_calibrate = true,
|
|
.can_calibrate = true,
|
|
|
|
+ .needs_new_timings = true,
|
|
};
|
|
};
|
|
|
|
|
|
static const struct of_device_id sunxi_mmc_of_match[] = {
|
|
static const struct of_device_id sunxi_mmc_of_match[] = {
|