]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: rockchip: rockchip_pdm: Handle runtime PM resume failures in set_fmt
authorbui duc phuc <phucduc.bui@gmail.com>
Tue, 2 Jun 2026 10:16:08 +0000 (17:16 +0700)
committerMark Brown <broonie@kernel.org>
Thu, 11 Jun 2026 19:49:42 +0000 (20:49 +0100)
rockchip_pdm_set_fmt() calls pm_runtime_get_sync() before accessing
hardware registers, but ignores its return value.
If the runtime resume fails, the function continues to perform register
accesses while the device state is undefined.
Replace pm_runtime_get_sync() with pm_runtime_resume_and_get() and
return early on failure to avoid unpowered register accesses.

Reported-by: Sashiko AI Review <sashiko-bot@kernel.org>
Closes: https://lore.kernel.org/all/20260522110302.349421F000E9@smtp.kernel.org/
Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
Link: https://patch.msgid.link/20260602101608.45137-6-phucduc.bui@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/rockchip/rockchip_pdm.c

index 8f78f7bc1806c6100bde8dab482030bfa7d33e5e..115e90d3bbfe058c800e073ec6493d1ab1003a65 100644 (file)
@@ -321,6 +321,7 @@ static int rockchip_pdm_set_fmt(struct snd_soc_dai *cpu_dai,
 {
        struct rk_pdm_dev *pdm = to_info(cpu_dai);
        unsigned int mask = 0, val = 0;
+       int ret;
 
        mask = PDM_CKP_MSK;
        switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
@@ -334,7 +335,10 @@ static int rockchip_pdm_set_fmt(struct snd_soc_dai *cpu_dai,
                return -EINVAL;
        }
 
-       pm_runtime_get_sync(cpu_dai->dev);
+       ret = pm_runtime_resume_and_get(cpu_dai->dev);
+       if (ret)
+               return ret;
+
        regmap_update_bits(pdm->regmap, PDM_CLK_CTRL, mask, val);
        pm_runtime_put(cpu_dai->dev);