From: Etienne Carriere Date: Tue, 28 Jan 2020 09:41:58 +0000 (+0100) Subject: dmaengine: stm32-dmamux: driver defers probe for clock and reset X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=6cc7089764ab88784cd82895d819e882f01942ce;p=linux.git dmaengine: stm32-dmamux: driver defers probe for clock and reset Changes STM32 DMAMUX driver to defer its probe operation when reset controller is expected but has not been probed yet. Changes error traces when failing to get a system resource so that it is not printed on failure with deferred probing. Signed-off-by: Etienne Carriere Signed-off-by: Amelie Delaunay Link: https://lore.kernel.org/r/20200128094158.20361-5-amelie.delaunay@st.com Signed-off-by: Vinod Koul --- diff --git a/drivers/dma/stm32-dmamux.c b/drivers/dma/stm32-dmamux.c index 1dfecbac64cfc..12f7637e13a1a 100644 --- a/drivers/dma/stm32-dmamux.c +++ b/drivers/dma/stm32-dmamux.c @@ -254,8 +254,8 @@ static int stm32_dmamux_probe(struct platform_device *pdev) stm32_dmamux->clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(stm32_dmamux->clk)) { ret = PTR_ERR(stm32_dmamux->clk); - if (ret == -EPROBE_DEFER) - dev_info(&pdev->dev, "Missing controller clock\n"); + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "Missing clock controller\n"); return ret; } @@ -266,7 +266,11 @@ static int stm32_dmamux_probe(struct platform_device *pdev) } rst = devm_reset_control_get(&pdev->dev, NULL); - if (!IS_ERR(rst)) { + if (IS_ERR(rst)) { + ret = PTR_ERR(rst); + if (ret == -EPROBE_DEFER) + goto err_clk; + } else { reset_control_assert(rst); udelay(2); reset_control_deassert(rst); @@ -291,7 +295,12 @@ static int stm32_dmamux_probe(struct platform_device *pdev) ret = of_dma_router_register(node, stm32_dmamux_route_allocate, &stm32_dmamux->dmarouter); if (ret) - clk_disable_unprepare(stm32_dmamux->clk); + goto err_clk; + + return 0; + +err_clk: + clk_disable_unprepare(stm32_dmamux->clk); return ret; }