Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae923989 authored by Venkat Gopalakrishnan's avatar Venkat Gopalakrishnan
Browse files

mmc: Fix bus width setting in enhanced strobe mode



The 8-bit bus width needs to be set first before switching to
DDR bus width when entering HS400 in enhanced strobe mode.
Also use the mmc_select_bus_width() for doing this instead of
rewriting portion of that code.

Change-Id: If9bec799de77714d7183c812a0ba04a9a4ac48f5
Signed-off-by: default avatarVenkat Gopalakrishnan <venkatg@codeaurora.org>
parent 5d2714cd
Loading
Loading
Loading
Loading
+5 −20
Original line number Diff line number Diff line
@@ -1137,8 +1137,12 @@ static int mmc_select_hs400(struct mmc_card *card)
	}

	val = EXT_CSD_DDR_BUS_WIDTH_8;
	if (card->ext_csd.strobe_support)
	if (card->ext_csd.strobe_support) {
		err = mmc_select_bus_width(card);
		if (IS_ERR_VALUE(err))
			return err;
		val |= EXT_CSD_BUS_WIDTH_STROBE;
	}
	err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
			 EXT_CSD_BUS_WIDTH,
			 val,
@@ -1149,25 +1153,6 @@ static int mmc_select_hs400(struct mmc_card *card)
		return err;
	}

	if (card->ext_csd.strobe_support) {
		mmc_set_bus_width(host, MMC_BUS_WIDTH_8);
		/*
		 * If controller can't handle bus width test,
		 * compare ext_csd previously read in 1 bit mode
		 * against ext_csd at new bus width
		 */
		if (!(host->caps & MMC_CAP_BUS_WIDTH_TEST))
			err = mmc_compare_ext_csds(card, MMC_BUS_WIDTH_8);
		else
			err = mmc_bus_test(card, MMC_BUS_WIDTH_8);

		if (err) {
			pr_warn("%s: switch to bus width %d failed\n",
				mmc_hostname(host), MMC_BUS_WIDTH_8);
			return err;
		}
	}

	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
			   EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS400,
			   card->ext_csd.generic_cmd6_time,