lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 638/800] ASoC: rk3328: fix missing clk_disable_unprepare() on error in rk3328_platform_probe()
    Date
    From: Yang Yingliang <yangyingliang@huawei.com>

    [ Upstream commit d14eece945a8068a017995f7512ea2beac21e34b ]

    Fix the missing clk_disable_unprepare() before return
    from rk3328_platform_probe() in the error handling case.

    Fixes: c32759035ad2 ("ASoC: rockchip: support ACODEC for rk3328")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20210518075847.1116983-1-yangyingliang@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/soc/codecs/rk3328_codec.c | 28 ++++++++++++++++++++++------
    1 file changed, 22 insertions(+), 6 deletions(-)

    diff --git a/sound/soc/codecs/rk3328_codec.c b/sound/soc/codecs/rk3328_codec.c
    index bfefefcc76d8..758d439e8c7a 100644
    --- a/sound/soc/codecs/rk3328_codec.c
    +++ b/sound/soc/codecs/rk3328_codec.c
    @@ -474,7 +474,8 @@ static int rk3328_platform_probe(struct platform_device *pdev)
    rk3328->pclk = devm_clk_get(&pdev->dev, "pclk");
    if (IS_ERR(rk3328->pclk)) {
    dev_err(&pdev->dev, "can't get acodec pclk\n");
    - return PTR_ERR(rk3328->pclk);
    + ret = PTR_ERR(rk3328->pclk);
    + goto err_unprepare_mclk;
    }

    ret = clk_prepare_enable(rk3328->pclk);
    @@ -484,19 +485,34 @@ static int rk3328_platform_probe(struct platform_device *pdev)
    }

    base = devm_platform_ioremap_resource(pdev, 0);
    - if (IS_ERR(base))
    - return PTR_ERR(base);
    + if (IS_ERR(base)) {
    + ret = PTR_ERR(base);
    + goto err_unprepare_pclk;
    + }

    rk3328->regmap = devm_regmap_init_mmio(&pdev->dev, base,
    &rk3328_codec_regmap_config);
    - if (IS_ERR(rk3328->regmap))
    - return PTR_ERR(rk3328->regmap);
    + if (IS_ERR(rk3328->regmap)) {
    + ret = PTR_ERR(rk3328->regmap);
    + goto err_unprepare_pclk;
    + }

    platform_set_drvdata(pdev, rk3328);

    - return devm_snd_soc_register_component(&pdev->dev, &soc_codec_rk3328,
    + ret = devm_snd_soc_register_component(&pdev->dev, &soc_codec_rk3328,
    rk3328_dai,
    ARRAY_SIZE(rk3328_dai));
    + if (ret)
    + goto err_unprepare_pclk;
    +
    + return 0;
    +
    +err_unprepare_pclk:
    + clk_disable_unprepare(rk3328->pclk);
    +
    +err_unprepare_mclk:
    + clk_disable_unprepare(rk3328->mclk);
    + return ret;
    }

    static const struct of_device_id rk3328_codec_of_match[] __maybe_unused = {
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 11:10    [W:4.055 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site