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

Commit bec9175b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mmc: sdhci-msm: Add checks to know if card supports strobe"

parents 52ca68bc fe16161f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1198,7 +1198,7 @@ static int mmc_select_hs400(struct mmc_card *card)
	mmc_set_timing(host, MMC_TIMING_MMC_HS400);
	mmc_set_bus_speed(card);

	if (host->ops->enhanced_strobe) {
	if (card->ext_csd.strobe_support && host->ops->enhanced_strobe) {
		mmc_host_clk_hold(host);
		err = host->ops->enhanced_strobe(host);
		mmc_host_clk_release(host);
+10 −7
Original line number Diff line number Diff line
@@ -787,7 +787,7 @@ static int sdhci_msm_cm_dll_sdc4_calibration(struct sdhci_host *host)
		writel_relaxed(ddr_config, host->ioaddr + CORE_DDR_CONFIG);
	}

	if (msm_host->enhanced_strobe)
	if (msm_host->enhanced_strobe && mmc_card_strobe(msm_host->mmc->card))
		writel_relaxed((readl_relaxed(host->ioaddr + CORE_DDR_200_CFG)
				| CORE_CMDIN_RCLK_EN),
				host->ioaddr + CORE_DDR_200_CFG);
@@ -835,8 +835,8 @@ static int sdhci_msm_enhanced_strobe(struct sdhci_host *host)

	pr_debug("%s: Enter %s\n", mmc_hostname(host->mmc), __func__);

	if (!msm_host->enhanced_strobe) {
		pr_debug("%s: host does not support hs400 enhanced strobe\n",
	if (!msm_host->enhanced_strobe || !mmc_card_strobe(mmc->card)) {
		pr_debug("%s: host/card does not support hs400 enhanced strobe\n",
				mmc_hostname(mmc));
		return -EINVAL;
	}
@@ -2670,7 +2670,9 @@ static void sdhci_msm_set_clock(struct sdhci_host *host, unsigned int clock)
		 * Select HS400 mode using the HC_SELECT_IN from VENDOR SPEC
		 * register
		 */
		if ((msm_host->tuning_done || msm_host->enhanced_strobe) &&
		if ((msm_host->tuning_done ||
				(mmc_card_strobe(msm_host->mmc->card) &&
				 msm_host->enhanced_strobe)) &&
				!msm_host->calibration_done) {
			/*
			 * Write 0x6 to HC_SELECT_IN and 1 to HC_SELECT_IN_EN
@@ -2892,8 +2894,9 @@ static void sdhci_msm_enhanced_strobe_mask(struct sdhci_host *host, bool set)
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;

	if (!msm_host->enhanced_strobe) {
		pr_debug("%s: host does not support hs400 enhanced strobe\n",
	if (!msm_host->enhanced_strobe ||
			!mmc_card_strobe(msm_host->mmc->card)) {
		pr_debug("%s: host/card does not support hs400 enhanced strobe\n",
				mmc_hostname(host->mmc));
		return;
	}
+3 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ struct mmc_ext_csd {
	u8			raw_rpmb_size_mult;	/* 168 */
	u8			raw_erased_mem_count;	/* 181 */
	u8			strobe_support;		/* 184 */
#define MMC_STROBE_SUPPORT	(1 << 0)
	u8			raw_ext_csd_structure;	/* 194 */
	u8			raw_card_type;		/* 196 */
	u8			raw_drive_strength;	/* 197 */
@@ -579,6 +580,8 @@ static inline void __maybe_unused remove_quirk(struct mmc_card *card, int data)
#define mmc_card_set_auto_bkops(c)	((c)->state |= MMC_STATE_AUTO_BKOPS)
#define mmc_card_clr_auto_bkops(c)	((c)->state &= ~MMC_STATE_AUTO_BKOPS)

#define mmc_card_strobe(c) (((c)->ext_csd).strobe_support & MMC_STROBE_SUPPORT)

/*
 * Quirk add/remove for MMC products.
 */