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

Commit e831ead3 authored by Wolfram Sang's avatar Wolfram Sang Committed by Ulf Hansson
Browse files

mmc: sh_mobile_sdhi: improve prerequisites for tuning



Prerequisites for tuning are the same as for hw_reset. We need an SCC
and a supported mode. Populate the tuning related functions only when
those conditions are met. This also removes a tiny race window.
Previously, the functions were populated when the SCC offset was not
initialized which could have led to an OOPS.

Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 6ade9a2c
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -621,11 +621,6 @@ static int sh_mobile_sdhi_probe(struct platform_device *pdev)
		host->card_busy	= sh_mobile_sdhi_card_busy;
		host->start_signal_voltage_switch =
			sh_mobile_sdhi_start_signal_voltage_switch;
		host->init_tuning	= sh_mobile_sdhi_init_tuning;
		host->prepare_tuning	= sh_mobile_sdhi_prepare_tuning;
		host->select_tuning	= sh_mobile_sdhi_select_tuning;
		host->check_scc_error	= sh_mobile_sdhi_check_scc_error;
		host->hw_reset		= sh_mobile_sdhi_hw_reset;
	}

	/* Orginally registers were 16 bit apart, could be 32 or 64 nowadays */
@@ -666,6 +661,7 @@ static int sh_mobile_sdhi_probe(struct platform_device *pdev)
	if (ret < 0)
		goto efree;

	/* Enable tuning iff we have an SCC and a supported mode */
	if (of_data && of_data->scc_offset && host->mmc->caps & MMC_CAP_UHS_SDR104) {
		const struct sh_mobile_sdhi_scc *taps = of_data->taps;
		bool hit = false;
@@ -685,6 +681,11 @@ static int sh_mobile_sdhi_probe(struct platform_device *pdev)
			dev_warn(&host->pdev->dev, "Unknown clock rate for SDR104\n");

		priv->scc_ctl = host->ctl + of_data->scc_offset;
		host->init_tuning = sh_mobile_sdhi_init_tuning;
		host->prepare_tuning = sh_mobile_sdhi_prepare_tuning;
		host->select_tuning = sh_mobile_sdhi_select_tuning;
		host->check_scc_error = sh_mobile_sdhi_check_scc_error;
		host->hw_reset = sh_mobile_sdhi_hw_reset;
	}

	i = 0;