ASoC: rockchip: Reorder clock enable sequence

bui duc phuc <phucduc.bui@gmail.com> says:

This series reorders the runtime resume clock enable sequence in the
Rockchip SPDIF and PDM drivers to enable the bus clock before the
functional controller clock.

It also updates the SPDIF DT binding clock descriptions to match the
actual clock usage in the driver.

Additionally, this v2 adds two new patches addressing issues reported
by the Sashiko AI Review tool regarding regcache sync failure handling
and runtime PM resume status validation.

Testing:
  - Patch 1: Verified (dt_binding_check passed).
  - Patches 2 to 5: Compile tested only. Please help test if you have
    the relevant Rockchip hardware.

Link: https://patch.msgid.link/20260602101608.45137-1-phucduc.bui@gmail.com
This commit is contained in:
Mark Brown 2026-06-11 20:49:43 +01:00
commit 4263ed78c5
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
3 changed files with 17 additions and 12 deletions

View File

@ -45,8 +45,8 @@ properties:
clocks:
items:
- description: clock for SPDIF bus
- description: clock for SPDIF controller
- description: clock for SPDIF bus
clock-names:
items:

View 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);
@ -422,16 +426,16 @@ static int rockchip_pdm_runtime_resume(struct device *dev)
struct rk_pdm_dev *pdm = dev_get_drvdata(dev);
int ret;
ret = clk_prepare_enable(pdm->clk);
ret = clk_prepare_enable(pdm->hclk);
if (ret) {
dev_err(pdm->dev, "clock enable failed %d\n", ret);
dev_err(pdm->dev, "hclock enable failed %d\n", ret);
return ret;
}
ret = clk_prepare_enable(pdm->hclk);
ret = clk_prepare_enable(pdm->clk);
if (ret) {
clk_disable_unprepare(pdm->clk);
dev_err(pdm->dev, "hclock enable failed %d\n", ret);
clk_disable_unprepare(pdm->hclk);
dev_err(pdm->dev, "clock enable failed %d\n", ret);
return ret;
}

View File

@ -76,16 +76,16 @@ static int rk_spdif_runtime_resume(struct device *dev)
struct rk_spdif_dev *spdif = dev_get_drvdata(dev);
int ret;
ret = clk_prepare_enable(spdif->mclk);
ret = clk_prepare_enable(spdif->hclk);
if (ret) {
dev_err(spdif->dev, "mclk clock enable failed %d\n", ret);
dev_err(spdif->dev, "hclk clock enable failed %d\n", ret);
return ret;
}
ret = clk_prepare_enable(spdif->hclk);
ret = clk_prepare_enable(spdif->mclk);
if (ret) {
clk_disable_unprepare(spdif->mclk);
dev_err(spdif->dev, "hclk clock enable failed %d\n", ret);
clk_disable_unprepare(spdif->hclk);
dev_err(spdif->dev, "mclk clock enable failed %d\n", ret);
return ret;
}
@ -94,6 +94,7 @@ static int rk_spdif_runtime_resume(struct device *dev)
ret = regcache_sync(spdif->regmap);
if (ret) {
regcache_cache_only(spdif->regmap, true);
clk_disable_unprepare(spdif->mclk);
clk_disable_unprepare(spdif->hclk);
}