diff options
author | Chaotian Jing <chaotian.jing@mediatek.com> | 2015-10-27 09:24:28 +0300 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2015-10-27 12:38:41 +0300 |
commit | 9979dbe5158899b556eb772b7335e29417ac0ddd (patch) | |
tree | 23c3b19e0caeb3b6ed96db532eafbfdd7c300aca /drivers/mmc/host/dw_mmc-rockchip.c | |
parent | c9b5061e7728da1f7192ecaf3ffab4a7300920dc (diff) | |
download | linux-9979dbe5158899b556eb772b7335e29417ac0ddd.tar.xz |
mmc: mmc: extend the mmc_send_tuning()
The mmc_execute_tuning() has already prepared the opcode,
there is no need to prepare it again at mmc_send_tuning(),
and, there is a BUG of mmc_send_tuning() to determine the opcode
by bus width, assume eMMC was running at HS200, 4bit mode,
then the mmc_send_tuning() will overwrite the opcode from CMD21
to CMD19, then got error.
in addition, extend an argument of "cmd_error" to allow getting
if there was cmd error when tune response.
Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
[Ulf: Rebased patch]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc/host/dw_mmc-rockchip.c')
-rw-r--r-- | drivers/mmc/host/dw_mmc-rockchip.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c index 4b3650f7d43f..9becebeeccd1 100644 --- a/drivers/mmc/host/dw_mmc-rockchip.c +++ b/drivers/mmc/host/dw_mmc-rockchip.c @@ -83,7 +83,7 @@ static void dw_mci_rk3288_set_ios(struct dw_mci *host, struct mmc_ios *ios) #define NUM_PHASES 360 #define TUNING_ITERATION_TO_PHASE(i) (DIV_ROUND_UP((i) * 360, NUM_PHASES)) -static int dw_mci_rk3288_execute_tuning(struct dw_mci_slot *slot) +static int dw_mci_rk3288_execute_tuning(struct dw_mci_slot *slot, u32 opcode) { struct dw_mci *host = slot->host; struct dw_mci_rockchip_priv_data *priv = host->priv; @@ -114,7 +114,7 @@ static int dw_mci_rk3288_execute_tuning(struct dw_mci_slot *slot) for (i = 0; i < NUM_PHASES; ) { clk_set_phase(priv->sample_clk, TUNING_ITERATION_TO_PHASE(i)); - v = !mmc_send_tuning(mmc); + v = !mmc_send_tuning(mmc, opcode, NULL); if (i == 0) first_v = v; |