| From 56f9aa5421419a190c4b4b9e7fe326f4901bd5f9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 23 Feb 2024 20:14:37 +0200 |
| Subject: mmc: omap: fix broken slot switch lookup |
| |
| From: Aaro Koskinen <aaro.koskinen@iki.fi> |
| |
| [ Upstream commit d4debbcbffa45c3de5df0040af2eea74a9e794a3 ] |
| |
| The lookup is done before host->dev is initialized. It will always just |
| fail silently, and the MMC behaviour is totally unpredictable as the switch |
| is left in an undefined state. Fix that. |
| |
| Fixes: e519f0bb64ef ("ARM/mmc: Convert old mmci-omap to GPIO descriptors") |
| Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> |
| Message-ID: <20240223181439.1099750-4-aaro.koskinen@iki.fi> |
| Reviewed-by: Linus Walleij <linus.walleij@linaro.org> |
| Acked-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Tony Lindgren <tony@atomide.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mmc/host/omap.c | 13 ++++++------- |
| 1 file changed, 6 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c |
| index 9fb8995b43a1c..aa40e1a9dc29e 100644 |
| --- a/drivers/mmc/host/omap.c |
| +++ b/drivers/mmc/host/omap.c |
| @@ -1384,13 +1384,6 @@ static int mmc_omap_probe(struct platform_device *pdev) |
| if (IS_ERR(host->virt_base)) |
| return PTR_ERR(host->virt_base); |
| |
| - host->slot_switch = gpiod_get_optional(host->dev, "switch", |
| - GPIOD_OUT_LOW); |
| - if (IS_ERR(host->slot_switch)) |
| - return dev_err_probe(host->dev, PTR_ERR(host->slot_switch), |
| - "error looking up slot switch GPIO\n"); |
| - |
| - |
| INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work); |
| INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work); |
| |
| @@ -1409,6 +1402,12 @@ static int mmc_omap_probe(struct platform_device *pdev) |
| host->dev = &pdev->dev; |
| platform_set_drvdata(pdev, host); |
| |
| + host->slot_switch = gpiod_get_optional(host->dev, "switch", |
| + GPIOD_OUT_LOW); |
| + if (IS_ERR(host->slot_switch)) |
| + return dev_err_probe(host->dev, PTR_ERR(host->slot_switch), |
| + "error looking up slot switch GPIO\n"); |
| + |
| host->id = pdev->id; |
| host->irq = irq; |
| host->phys_base = res->start; |
| -- |
| 2.43.0 |
| |