ASoC: amd: acp-mach-common: Add missing error check for clock acquisition

The acp_card_rt5682_init() and acp_card_rt5682s_init() functions did not
check the return values of clk_get(). This could lead to a kernel crash
when the invalid pointers are later dereferenced by clock core
functions.

Fix this by:
1. Changing clk_get() to the device-managed devm_clk_get().
2. Adding IS_ERR() checks immediately after each clock acquisition.

Fixes: 8b72562668 ("ASoC: amd: acp: Add support for RT5682-VS codec")
Fixes: d4c750f2c7 ("ASoC: amd: acp: Add generic machine driver support for ACP cards")
Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
Link: https://patch.msgid.link/20260310044327.2582018-1-nichen@iscas.ac.cn
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Chen Ni
2026-03-10 12:43:27 +08:00
committed by Mark Brown
parent a9683730e8
commit 30c64fb983

View File

@@ -127,8 +127,13 @@ static int acp_card_rt5682_init(struct snd_soc_pcm_runtime *rtd)
if (drvdata->hs_codec_id != RT5682) if (drvdata->hs_codec_id != RT5682)
return -EINVAL; return -EINVAL;
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk"); drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk"); if (IS_ERR(drvdata->wclk))
return PTR_ERR(drvdata->wclk);
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
if (IS_ERR(drvdata->bclk))
return PTR_ERR(drvdata->bclk);
ret = snd_soc_dapm_new_controls(dapm, rt5682_widgets, ret = snd_soc_dapm_new_controls(dapm, rt5682_widgets,
ARRAY_SIZE(rt5682_widgets)); ARRAY_SIZE(rt5682_widgets));
@@ -370,8 +375,13 @@ static int acp_card_rt5682s_init(struct snd_soc_pcm_runtime *rtd)
return -EINVAL; return -EINVAL;
if (!drvdata->soc_mclk) { if (!drvdata->soc_mclk) {
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk"); drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk"); if (IS_ERR(drvdata->wclk))
return PTR_ERR(drvdata->wclk);
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
if (IS_ERR(drvdata->bclk))
return PTR_ERR(drvdata->bclk);
} }
ret = snd_soc_dapm_new_controls(dapm, rt5682s_widgets, ret = snd_soc_dapm_new_controls(dapm, rt5682s_widgets,