From 13c446a390d3d7a9e0748a3ab5c951e2031ae27f Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Fri, 22 Dec 2023 10:00:45 +0800 Subject: [PATCH] ASoC: rockchip: i2s-tdm: Handle HCLK with runtime PM This patch handle HCLK with runtime PM to simplify code. Signed-off-by: Sugar Zhang Change-Id: I4a75b0998053e7ef1edb3ecf3bc50ab84eddce70 --- sound/soc/rockchip/rockchip_i2s_tdm.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c index efaa378dc36b..c10b143fbd1d 100644 --- a/sound/soc/rockchip/rockchip_i2s_tdm.c +++ b/sound/soc/rockchip/rockchip_i2s_tdm.c @@ -2673,6 +2673,7 @@ static int i2s_tdm_runtime_suspend(struct device *dev) clk_disable_unprepare(i2s_tdm->mclk_tx); clk_disable_unprepare(i2s_tdm->mclk_rx); + clk_disable_unprepare(i2s_tdm->hclk); pinctrl_pm_select_idle_state(dev); @@ -2703,6 +2704,10 @@ static int i2s_tdm_runtime_resume(struct device *dev) if (i2s_tdm->is_master_mode) rockchip_i2s_tdm_pinctrl_select_clk_state(dev); + ret = clk_prepare_enable(i2s_tdm->hclk); + if (ret) + goto err_hclk; + ret = clk_prepare_enable(i2s_tdm->mclk_tx); if (ret) goto err_mclk_tx; @@ -2731,6 +2736,8 @@ err_regmap: err_mclk_rx: clk_disable_unprepare(i2s_tdm->mclk_tx); err_mclk_tx: + clk_disable_unprepare(i2s_tdm->hclk); +err_hclk: return ret; } @@ -2873,10 +2880,6 @@ static int rockchip_i2s_tdm_probe(struct platform_device *pdev) if (IS_ERR(i2s_tdm->hclk)) return PTR_ERR(i2s_tdm->hclk); - ret = clk_prepare_enable(i2s_tdm->hclk); - if (ret) - return ret; - i2s_tdm->mclk_tx = devm_clk_get(&pdev->dev, "mclk_tx"); if (IS_ERR(i2s_tdm->mclk_tx)) return PTR_ERR(i2s_tdm->mclk_tx); @@ -3035,16 +3038,10 @@ err_pm_disable: static int rockchip_i2s_tdm_remove(struct platform_device *pdev) { - struct rk_i2s_tdm_dev *i2s_tdm = dev_get_drvdata(&pdev->dev); - pm_runtime_disable(&pdev->dev); if (!pm_runtime_status_suspended(&pdev->dev)) i2s_tdm_runtime_suspend(&pdev->dev); - clk_disable_unprepare(i2s_tdm->mclk_tx); - clk_disable_unprepare(i2s_tdm->mclk_rx); - clk_disable_unprepare(i2s_tdm->hclk); - return 0; }