From aafa66673b1819cdcd63d6651cfd9064a978c69d Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Wed, 3 Nov 2021 16:27:12 +0800 Subject: [PATCH] ASoC: rockchip: i2s: Fix unbalanced hclk handle in error paths Fix warning: rockchip_i2s_probe() warn: 'i2s->hclk' not released on lines: 719,724,731. Signed-off-by: Sugar Zhang Change-Id: Ic3aeb86a2880aae0d004030b802aec187b74b6c6 --- sound/soc/rockchip/rockchip_i2s.c | 38 ++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c index 351fb8c0d515..b31431327c7c 100644 --- a/sound/soc/rockchip/rockchip_i2s.c +++ b/sound/soc/rockchip/rockchip_i2s.c @@ -701,24 +701,6 @@ static int rockchip_i2s_probe(struct platform_device *pdev) i2s->pins = of_id->data; } - /* try to prepare related clocks */ - i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk"); - if (IS_ERR(i2s->hclk)) { - dev_err(&pdev->dev, "Can't retrieve i2s bus clock\n"); - return PTR_ERR(i2s->hclk); - } - ret = clk_prepare_enable(i2s->hclk); - if (ret) { - dev_err(i2s->dev, "hclock enable failed %d\n", ret); - return ret; - } - - i2s->mclk = devm_clk_get(&pdev->dev, "i2s_clk"); - if (IS_ERR(i2s->mclk)) { - dev_err(&pdev->dev, "Can't retrieve i2s master clock\n"); - return PTR_ERR(i2s->mclk); - } - regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res); if (IS_ERR(regs)) return PTR_ERR(regs); @@ -735,6 +717,24 @@ static int rockchip_i2s_probe(struct platform_device *pdev) dev_set_drvdata(&pdev->dev, i2s); + i2s->mclk = devm_clk_get(&pdev->dev, "i2s_clk"); + if (IS_ERR(i2s->mclk)) { + dev_err(&pdev->dev, "Can't retrieve i2s master clock\n"); + return PTR_ERR(i2s->mclk); + } + + /* try to prepare related clocks */ + i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk"); + if (IS_ERR(i2s->hclk)) { + dev_err(&pdev->dev, "Can't retrieve i2s bus clock\n"); + return PTR_ERR(i2s->hclk); + } + ret = clk_prepare_enable(i2s->hclk); + if (ret) { + dev_err(i2s->dev, "hclock enable failed %d\n", ret); + return ret; + } + pm_runtime_enable(&pdev->dev); if (!pm_runtime_enabled(&pdev->dev)) { ret = i2s_runtime_resume(&pdev->dev); @@ -769,6 +769,8 @@ err_suspend: err_pm_disable: pm_runtime_disable(&pdev->dev); + clk_disable_unprepare(i2s->hclk); + return ret; }