[PATCH] mmc: sdhci-of-aspeed: depopulate slots before disabling clock
Pengpeng Hou <[email protected]> Tue, 16 Jun 2026 08:49:53 +0800
| Newsgroups | org.ozlabs.lists.openbmc,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mmc,org.ozlabs.lists.linux-aspeed |
|---|---|
| Message-ID | <[email protected]> |
aspeed_sdc_probe() creates child slot devices one by one after enabling the controller clock. If a later slot creation fails, the already-created slot devices remain registered while the parent probe returns an error. Depopulate any created slot devices on probe failure and during remove, before disabling the shared controller clock used by the slots. Signed-off-by: Pengpeng Hou <[email protected]> --- drivers/mmc/host/sdhci-of-aspeed.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci-of-aspeed.c b/drivers/mmc/host/sdhci-of-aspeed.c index f5d973783cbe..3e941b176687 100644 --- a/drivers/mmc/host/sdhci-of-aspeed.c +++ b/drivers/mmc/host/sdhci-of-aspeed.c @@ -560,12 +560,14 @@ static int aspeed_sdc_probe(struct platform_device *pdev) cpdev = of_platform_device_create(child, NULL, &pdev->dev); if (!cpdev) { ret = -ENODEV; - goto err_clk; + goto err_depopulate; } } return 0; +err_depopulate: + of_platform_depopulate(&pdev->dev); err_clk: clk_disable_unprepare(sdc->clk); return ret; @@ -575,6 +577,7 @@ static void aspeed_sdc_remove(struct platform_device *pdev) { struct aspeed_sdc *sdc = dev_get_drvdata(&pdev->dev); + of_platform_depopulate(&pdev->dev); clk_disable_unprepare(sdc->clk); } -- 2.50.1 (Apple Git-155)