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

Commit b793f658 authored by Doug Anderson's avatar Doug Anderson Committed by Ulf Hansson
Browse files

mmc: dw_mmc: Don't try to enable the CD until we're sure we're not deferring



If dw_mci_init_slot() returns that we got a probe deferral then it may
leave slot->mmc as NULL.  That will cause dw_mci_enable_cd() to crash
when it calls mmc_gpio_get_cd().

Fix this by moving the call of dw_mci_enable_cd() until we're sure
that we're good.  Note that if we have more than one slot and one
defers (but the others don't) things won't work so well.  ...but
that's not a new thing and everyone has already agreed that multislot
support ought to be removed from dw_mmc eventually anyway since it is
unused, untested, and you can see several bugs like this by inspecting
the code.

Fixes: bcafaf5470f0 ("mmc: dw_mmc: Only enable CD after setup and only if needed")
Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
Signed-off-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 5c935165
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -2890,9 +2890,6 @@ int dw_mci_probe(struct dw_mci *host)
			init_slots++;
			init_slots++;
	}
	}


	/* Now that slots are all setup, we can enable card detect */
	dw_mci_enable_cd(host);

	if (init_slots) {
	if (init_slots) {
		dev_info(host->dev, "%d slots initialized\n", init_slots);
		dev_info(host->dev, "%d slots initialized\n", init_slots);
	} else {
	} else {
@@ -2901,6 +2898,9 @@ int dw_mci_probe(struct dw_mci *host)
		goto err_dmaunmap;
		goto err_dmaunmap;
	}
	}


	/* Now that slots are all setup, we can enable card detect */
	dw_mci_enable_cd(host);

	if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
	if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
		dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
		dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");