Skip to content

Commit

Permalink
dmaengine: stm32-dmamux: driver defers probe for clock and reset
Browse files Browse the repository at this point in the history
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 <etienne.carriere@st.com>
Signed-off-by: Amelie Delaunay <amelie.delaunay@st.com>
Link: https://lore.kernel.org/r/20200128094158.20361-5-amelie.delaunay@st.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
  • Loading branch information
Etienne Carriere authored and Vinod Koul committed Feb 24, 2020
1 parent d04d2f6 commit 6cc7089
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions drivers/dma/stm32-dmamux.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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);
Expand All @@ -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;
}
Expand Down

0 comments on commit 6cc7089

Please sign in to comment.